1 Pip luôn cài đặt lại các gói đã nén ngay cả khi đã cài đặt

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang xây dựng tệp tests.txt để triển khai một nhóm các gói Python trong nhóm của mình thông qua pip. Tôi đã tự lưu các gói trên máy chủ cục bộ để giảm thiểu tải xuống internet, vì vậy tôi có một loạt các bánh xe và tệp gz /zip trong một thư mục.

Ví dụ test.txt:

packages\networkx-2.3.zip
packages\cx_Oracle-7.1.3-cp37-cp37m-win_amd64.whl
packages\SQLAlchemy-1.3.3.tar.gz

Đối với các tệp whl, pip bỏ qua các gói đã được cài đặt chính xác, nhưng đối với các gói gz /zip, nó luôn cài đặt lại chúng.

Đây là những gì tôi nhận được khi chạy tệp test.txt của mình thông qua pip:

λ pip install -r test.txt
Processing c:\users\xxxx\dev\python deploy\packages\networkx-2.3.zip
Processing c:\users\xxxx\dev\python deploy\packages\sqlalchemy-1.3.3.tar.gz
Requirement already satisfied: cx-Oracle==7.1.3 from file:///C:/Users/xxxx/dev/Python%20deploy/packages/cx_Oracle-7.1.3-cp37-cp37m-win_amd64.whl in c:\users\xxxx\appdata\local\programs\python\python37\lib\site-packages (from -r test.txt (line 2)) (7.1.3)
Requirement already satisfied: decorator>=4.3.0 in c:\users\xxxx\appdata\local\programs\python\python37\lib\site-packages (from networkx==2.3->-r test.txt (line 1)) (4.4.0)
Installing collected packages: networkx, SQLAlchemy
  Found existing installation: networkx 2.3
    Uninstalling networkx-2.3:
      Successfully uninstalled networkx-2.3
  Running setup.py install for networkx ... done
  Found existing installation: SQLAlchemy 1.3.3
    Uninstalling SQLAlchemy-1.3.3:
      Successfully uninstalled SQLAlchemy-1.3.3
  Running setup.py install for SQLAlchemy ... done
Successfully installed SQLAlchemy-1.3.3 networkx-2.3

Làm cách nào tôi có thể bỏ qua việc cài đặt lại các gói đã nén?

    
3
1 Câu trả lời                              1                         

Hành vi này được mong đợi vì pip không thể so sánh tệp băm bánh xe với gói đã cài đặt. Sử dụng thông số kỹ thuật phụ thuộc kết hợp với find-links thay vì đường dẫn trực tiếp đến tệp trong test.txt:

--find-links=packages
networkx==2.3
SQLAlchemy==1.3.3

Hoặc chuyển đổi dists nguồn thành bánh xe với

$ pip wheel -r test.txt --wheel-dir packages

và sử dụng các bánh xe kết quả thay vì dists nguồn trong test.txt:

packages\networkx-2.3-py2.py3-none-any.whl
packages\SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl

Điều này cũng sẽ tăng tốc thời gian cài đặt vì các bánh xe đã được dựng sẵn. Tuy nhiên, các gói có phần mở rộng C (như SQLAlchemy trong trường hợp này) sẽ tạo ra các bánh xe không phải là nền tảng hoặc python-agnory, vì vậy, ví dụ: SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl chỉ có thể được cài đặt cho Python 3.6 trên các cửa sổ 64 bit. Nếu các thành viên trong nhóm của bạn có môi trường làm việc khác nhau (ví dụ: một số sử dụng WUsows, một số sử dụng MacOS, v.v.), bạn sẽ cần cung cấp các bánh xe dựng sẵn cho từng môi trường; trong trường hợp này, hãy sử dụng giải pháp find-links.

    
0
2019-05-08 21: 54: 02Z
nguồn đặt đây