pip всегда переустанавливает ZIP-пакеты, даже если они уже установлены - PullRequest
3 голосов
/ 08 мая 2019

Я создаю файл 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

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

1 Ответ

0 голосов
/ 09 мая 2019

Такое поведение ожидается, поскольку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...