Из-за отсутствия поддержки некоторых библиотек, которые я хочу использовать, я перевел некоторые разработки на Python с Windows на Linux. Я потратил большую часть дня, возиться с зависимостями.
Вопрос
Всякий раз, когда я беру Linux, я обычно сталкиваюсь с какой-то проблемой зависимости, обычно с библиотеками разработки, независимо от того, устанавливаются они через apt-get, easy_install или pip. Я могу тратить дни на то, что должно быть простыми задачами, тратить больше времени на работу библиотек, чем на написание кода. Где я могу узнать о стратегии решения подобных проблем, а не бесцельно искать кого-то, кто сталкивался с такой же проблемой раньше?
Пример
Только один пример: я хотел создать несколько QR-кодов. Итак, я решил использовать github.com / bitly / pyqrencode , основанный на pyqrcode.sourceforge.net , но предположительно без зависимостей Java. Есть и другие ( pyqrnative , github.com / Arachnid / pyqrencode ), но этот вариант кажется лучшим выбором для моих нужд.
Итак, я нашел пакет на pypi и подумал, что это облегчит жизнь:
(Возможно, я сам усложнил себе жизнь, используя virtualenv, чтобы держать вещи в чистоте и порядке).
(myenv3)mat@ubuntu:~/myenv3$ bin/pip install pyqrencode
Downloading/unpacking pyqrencode
Downloading pyqrencode-0.2.tar.gz
Running setup.py egg_info for package pyqrencode
Installing collected packages: pyqrencode
Running setup.py install for pyqrencode
building 'qrencode' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c qrencode.c -o build/temp.linux-i686-2.7/qrencode.o
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions build/temp.linux-i686-2.7/qrencode.o -lqrencode -o build/lib.linux-i686-2.7/qrencode.so
Successfully installed pyqrencode
Cleaning up...
(Наверное, я тоже sudo apt-get install libqrencode-dev
в какой-то момент до этого тоже.)
Итак, я попытался запустить тестовый скрипт:
(myenv3)mat@ubuntu:~/myenv3$ python test_qr.py
Traceback (most recent call last):
File "test_qr.py", line 1, in <module>
from qrencode import Encoder
File "qrencode.pyx", line 1, in init qrencode (qrencode.c:1520)
ImportError: No module named ImageOps
(
Что ж, исследования показали, что ImageOps является частью PIL ...
(myenv3)mat@ubuntu:~/myenv3$ pip install pil
Downloading/unpacking pil
Downloading PIL-1.1.7.tar.gz (506Kb): 122Kb downloaded
Operation cancelled by user
Storing complete log in /home/mat/.pip/pip.log
(myenv3)mat@ubuntu:~/myenv3$ bin/pip install pil
Downloading/unpacking pil
Downloading PIL-1.1.7.tar.gz (506Kb): 506Kb downloaded
Running setup.py egg_info for package pil
WARNING: '' not a valid package name; please use only.-separated package names in setup.py
Installing collected packages: pil
Running setup.py install for pil
WARNING: '' not a valid package name; please use only.-separated package names in setup.py
building '_imaging' extension
gcc ...
building '_imagingmath' extension
gcc ...
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
To check the build, run the selftest.py script.
...
Successfully installed pil
Cleaning up...
Хм, PIL установлен, но не подобрал библиотеки, которые я установил с sudo apt-get install libjpeg62 libjpeg62-dev libpng12-dev zlib1g zlib1g-dev
ранее. Я не уверен, как сказать pip, чтобы он указывал расположение библиотек в setup.py. Гугл предлагает множество идей , которые я попробовал, но ни одна из них, похоже, не поможет, кроме как отправить меня по кругу.
Ubuntu 11.04: установка PIL в virtualenv с PIP предлагает вместо этого использовать пакет pillow , поэтому попробуем:
(myenv3)mat@ubuntu:~/myenv3$ pip install pillow
Downloading/unpacking pillow
Downloading Pillow-1.7.5.zip (637Kb): 637Kb downloaded
Running setup.py egg_info for package pillow
...
Installing collected packages: pillow
Running setup.py install for pillow
building '_imaging' extension
gcc ...
--------------------------------------------------------------------
SETUP SUMMARY (Pillow 1.7.5 / PIL 1.1.7)
--------------------------------------------------------------------
version 1.7.5
platform linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
To check the build, run the selftest.py script.
...
Successfully installed pillow
Cleaning up...
Ну, похоже, на этот раз у нас есть поддержка JPEG и PNG, ууу!
(myenv3)mat@ubuntu:~/myenv3$ python test_qr.py
Traceback (most recent call last):
File "test_qr.py", line 1, in <module>
from qrencode import Encoder
File "qrencode.pyx", line 1, in init qrencode (qrencode.c:1520)
ImportError: No module named ImageOps
Все еще нет ImageOps, хотя. Теперь я в замешательстве, ImageOps отсутствует в подушке, или это другая проблема, которая была также с Pil.