Можно ли установить часть пакета Python через Pip? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть внутренняя служебная библиотека, которая используется во многих проектах.Проекты в коде, который они извлекают из библиотеки утилит, частично перекрываются, но по мере роста библиотеки увеличивается количество дополнительных ресурсов, которые получает каждый отдельный проект, который он не будет использовать.Это не будет проблемой, если библиотека состоит только из Python, но библиотека также объединяет в двоичные файлы.

Example-

psycopg2 используется в несколькихместа в библиотеке утилит, но не все проекты требуют доступа к БД.Поскольку среда разработки отличается от рабочей среды, библиотека утилит также включает в себя исполняемые файлы psycopg2 для среды prod.

Она растет вместе с библиотеками openssl, пандами, numpy, scipy, pyarrow и т. Д. Результатзаключается в том, что небольшой, специализированный сценарий из 50 строк, которому может потребоваться доступ к базе данных, включен в пакет развертывания объемом более 100 МБ.

enter image description here

Итак, что бы яНапример, разделить библиотеку утилит на части, в которых проекты могут выбирать, какие фрагменты использовать, но хранить код библиотеки утилит в одном удобном для управления месте.Таким образом, это небольшое одноцелевое приложение может импортировать internal-util@core, internal-util@db и не включать internal-util@numpy и internal-util@openssl

enter image description here

Можно ли описать то, что я описываю?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы пробовали смотреть на pip freeze > requirements.txt и pip install -r requirements.txt?

После того как вы сгенерировали свой список пипсов с помощью pip freeze, можно редактировать, какие пакеты вы хотите установить, а какие пропустить из сгенерированных requirements.txt.
Затем вы можете pip install -r requirements.txt то, что вам нужнообратно.

0 голосов
/ 17 декабря 2018

Не напрямую, насколько мне известно.pip устанавливает пакет полностью или не устанавливает его полностью.

Однако, если вы осторожны в своем пакете относительно того, как вы импортируете вещи, для которых может потребоваться psycopg2 или someotherlargebinarything, вы можете использовать extras_require и, таким образом, пользователи пакета выбирают, какие зависимости они хотят получить:

setup(
  # ...
  name='myawesometoolbelt',
  extras_require={
    'db': ['psycopg2'],
    'math': ['numpy'],
  },
)

, а затем в вашем вызове requirements.txt или pip,

myawesometoolbelt[db,math]
...