Do thiếu sự hỗ trợ cho một số thư viện tôi muốn sử dụng, tôi đã chuyển một số phát triển Python từ Windows sang phát triển Linux. Tôi đã dành phần lớn thời gian trong ngày để làm quen với phụ thuộc.Làm thế nào để đối phó với Linux/Python phụ thuộc?
Câu hỏi đặt ra
Bất cứ khi nào tôi nhặt Linux, tôi thường gặp phải một số loại vấn đề phụ thuộc, thường với các thư viện phát triển, cho dù họ đang được cài đặt qua apt-get, easy_install hoặc pip. Tôi có thể lãng phí ngày về những gì nên được nhiệm vụ đơn giản, chi tiêu lâu hơn vào việc thư viện để làm việc hơn là viết mã. Tôi có thể tìm hiểu về chiến lược xử lý các loại vấn đề này thay vì googling không mục đích cho ai đó gặp phải vấn đề tương tự trước đây?
Một ví dụ
Chỉ cần một ví dụ: tôi muốn tạo ra một số mã QR. Vì vậy, tôi nghĩ rằng tôi muốn sử dụng github.com/bitly/pyqrencode được dựa trên pyqrcode.sourceforge.net nhưng được cho là không có phụ thuộc Java. Có những người khác (pyqrnative, github.com/Arachnid/pyqrencode) nhưng có vẻ như đặt cược tốt nhất cho nhu cầu của tôi.
Vì vậy, tôi thấy các gói trên pypi và nghĩ rằng sử dụng đó sẽ làm cho cuộc sống dễ dàng hơn: (. Tôi đã có thể làm cho cuộc sống khó khăn hơn cho bản thân mình bằng cách sử dụng virtualenv để giữ cho mọi thứ gọn gàng và ngăn nắp)
(myenv3)[email protected]:~/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...
(tôi đoán tôi có lẽ sudo apt-get install libqrencode-dev
tại một số điểm trước đó quá.)
Vì vậy, sau đó tôi đã cố gắng để chạy các kịch bản thử nghiệm:
(myenv3)[email protected]:~/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
:(
Vâng, investigations tiết lộ rằng ImageOps dường như là một phần của PIL ...
(myenv3)[email protected]:~/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)[email protected]:~/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...
Hmm, PIL được cài đặt nhưng chưa nhặt các thư viện tôi cài đặt với sudo apt-get install libjpeg62 libjpeg62-dev libpng12-dev zlib1g zlib1g-dev
trước . Tôi không chắc chắn làm thế nào để nói cho pip để nuôi các địa điểm thư viện để setup.py. Googling đề nghị một loạt các ideas mà tôi đã thử, nhưng không ai trong số họ dường như giúp đỡ nhiều hơn là gửi cho tôi vòng trong vòng tròn.
Ubuntu 11.04: Installing PIL into a virtualenv with PIP gợi ý sử dụng gói pillow thay vào đó, vì vậy hãy cố gắng rằng:
(myenv3)[email protected]:~/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...
Vâng, chúng ta dường như có JPEG và PNG hỗ trợ lần này, yay!
(myenv3)[email protected]:~/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
Vẫn không có ImageOps. Bây giờ tôi đang bối rối, là ImageOps mất tích từ gối, hoặc nó là một vấn đề khác nhau mà cũng đã có với pil.
apt-get cài đặt python-hình ảnh – jterrace
@jerrace Đã có, nhưng tôi giả định rằng được vô hiệu hóa bởi virtualenv --no-site-packages – Mat
Điều này nghe với tôi như nó có thể được kích hoạt bởi PIL đang cài đặt hai cách - hoặc là trong không gian tên PIL hoặc như các gói riêng lẻ. Có phải 'pyqrencode' sử dụng' import ImageOps' hoặc 'import PIL.ImageOps' không? Hãy thử chuyển đổi nó sau đó xây dựng lại. – agf