Trong ứng dụng của tôi, tôi muốn sử dụng:
packageA
, yêu cầupackageX==1.3
packageB
, yêu cầupackageX==1.4
packageX==1.5
Làm cách nào để cài đặt nhiều phiên bản packageX
với pip để xử lý tình huống này?
Trong ứng dụng của tôi, tôi muốn sử dụng:
packageA
, yêu cầu packageX==1.3
packageB
, yêu cầu packageX==1.4
packageX==1.5
Làm cách nào để cài đặt nhiều phiên bản packageX
với pip để xử lý tình huống này?
packageX>=1.3,<2
và packageX>=1.4,<2
(giả sử gói ngược dòng đang tuân theo Phiên bản ngữ nghĩa ), thì bạn với tư cách là nhà phát triển ứng dụng phía dưới sẽ không gặp vấn đề gì khi ghim và sử dụng packageX==1.5
và mọi người sẽ rất vui. Thêm chi tiết ở đây
Câu trả lời:
pip sẽ không giúp bạn điều này.
Bạn có thể yêu cầu nó cài đặt một phiên bản cụ thể, nhưng nó sẽ ghi đè phiên bản khác. Mặt khác, sử dụng hai Virtualenv sẽ cho phép bạn cài đặt cả hai phiên bản trên cùng một máy, nhưng không thể sử dụng chúng cùng một lúc.
Tốt nhất bạn nên cài đặt cả hai phiên bản theo cách thủ công, bằng cách đặt chúng vào đường dẫn Python của bạn với một tên khác.
Nhưng nếu hai lib của bạn mong muốn chúng có cùng tên (và họ nên làm như vậy), bạn sẽ phải sửa đổi chúng để chúng chọn phiên bản chúng cần với một số bí danh nhập như:
import dependencyname_version as dependencyname
Hiện tại không có cách nào rõ ràng để làm điều này. Điều tốt nhất bạn có thể hy vọng là để bản hack này hoạt động.
Tôi thà bỏ một trong hai lib và thay thế nó bằng một lib tương đương, hoặc vá nó để chấp nhận phiên bản phụ thuộc mới và trả lại bản vá cho cộng đồng.
Tải về nguồn cho ea. gói hàng. Cài đặt từng thứ trên thư mục riêng biệt của riêng nó. Ví dụ. Tôi đã có gói phiên bản 1.10, nhưng muốn chuyển sang phiên bản dev cho một số công việc. Tôi đã tải về mã nguồn cho các mô-đun dev:
git clone https://github.com/networkx/networkx.git
cd netwokrx
Tôi tạo ra một thư mục cho phiên bản này:
mkdir /home/username/opt/python
, sau đó tôi đặt PYTHONPATH env var: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/
. Tiếp theo, tôi đã cài đặt nó bằng cách sử dụng:python setup.py install --prefix=/home/username/opt/python
Bây giờ, vì PYTHONPATH của tôi hiện đang trỏ đến thư mục gói trang khác này, nên khi tôi chạy python trên dòng lệnh và nhập mô-đun mới, nó sẽ hoạt động. Để chuyển đổi lại, hãy xóa thư mục mới khỏi PYTHONPATH.
>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'
networkx
sự khác biệt về phiên bản!
sys.path