1 Вопрос: pip всегда переустанавливает заархивированные пакеты, даже если они уже установлены

вопрос создан в Wed, May 8, 2019 12:00 AM

Я создаю файл require.txt для развертывания набора пакетов Python в моей команде через pip. Я сохранил сами пакеты на локальном сервере, чтобы свести к минимуму загрузку через Интернет, поэтому у меня в папке куча колес и файлов gz /zip.

Пример 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

Для whl-файлов pip правильно пропускает уже установленные пакеты, но для gz /zip всегда переустанавливает их.

Вот что я получаю, когда запускаю файл test.txt через 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

Как я могу пропустить переустановку сжатых пакетов?

    
3
1 ответ                              1                         

Такое поведение ожидается, потому что pip не может сравнить хеш файла колеса с установленным пакетом. Либо используйте спецификации зависимостей в сочетании с find-links вместо прямых путей к файлам в test.txt:

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

Или конвертируйте исходные диски в колеса с помощью

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

и используйте получившиеся колеса вместо исходных дисков в test.txt:

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

Это также должно ускорить время установки, поскольку колеса уже готовы. Однако пакеты с расширениями C (например, SQLAlchemy в этом случае) будут производить колеса, не зависящие от платформы или питона, например, например, SQLAlchemy-1.3.3-cp36-cp36m-win_amd64.whl можно установить только для Python 3.6 в 64-битных окнах. Если члены вашей команды работают в разных рабочих средах (например, некоторые используют Windows, некоторые используют MacOS и т. Д.), Вам нужно будет предоставить готовые колеса для каждой среды; в этом случае придерживайтесь решения find-links.

    
0
2019-05-08 21: 54: 02Z
источник размещен Вот