Как работать с зависимостями Linux / Python?

Из-за отсутствия поддержки некоторых библиотек, которые я хочу использовать, я перенес часть разработки 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. Поиск в Google предлагает множество идей , которые я ' Я пробовал, но никто из них, похоже, не помогает, кроме как отправлять меня по кругу.

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.

13
задан Community 23 May 2017 в 11:45
поделиться