Создайте колесо/яйцо и все зависимости для проекта Python

Чтобы запустить проект Python в нашей корпорации, мне нужно сделать устанавливаемый дистрибутив.

Это должно включать:

  • Яйцо или whl для моего проекта
  • Яйцо или whl для каждой зависимости проекта
  • (необязательно) создайте файл requirements.txt со списком всех устанавливаемых компонентов для этого выпуска.

Есть ли простой плагин (например, альтернатива bdist_wheel), который будет компилировать не только одно колесо, но и компоненты этого проекта?

Очевидно, я могу написать это, но я надеялся, что может быть короткий путь, который создает пакет + зависимости за меньшее количество шагов.

Это должно работать на Python 2.7 в Windows + Linux.


person Salim Fadhley    schedule 26.09.2014    source источник


Ответы (3)


С помощью poetry вы можете определить свои зависимости и метаданные о вашем проекте в файле в корне вашего проекта, который называется pyproject.toml:

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "some longer description"
authors = ["Some Author <[email protected]>"]

[tool.poetry.dependencies]
python = "*"

[tool.poetry.dev-dependencies]
pytest = "^3.4"

Чтобы построить свой проект в виде колеса, выполните poetry build

$ poetry build

Building my-project (0.1.0)
- Building sdist
- Built my-project-0.1.0.tar.gz

- Building wheel
- Built my-project-0.1.0-py3-none-any.whl

создается папка dist/ с колесом для вашего проекта.

person Vincent Claes    schedule 24.02.2021
comment
Что-то здесь подозрительное ... 6-летний вопрос имеет 2-месячный ответ в качестве принятого ответа? - person Klaas van Schelven; 14.04.2021
comment
ОП может переключить правильный ответ meta.stackexchange.com/a/120569/874594 - person Vincent Claes; 15.04.2021
comment
это все равно не добавит все указанные зависимости в созданный файл колеса. отдельные зависимости будут загружены при его установке. - person rh979; 06.05.2021
comment
@ rh979 колесо не должно иметь всех зависимостей. Впоследствии вы можете сделать pip install path/to/wheel.whl --target /path/to/some/folder и заархивировать содержимое «папки», чтобы все ваши зависимости были в zip-архиве, и отправить его в среду, в которой вы хотите запустить свой код. - person Vincent Claes; 06.05.2021

Вам нужно будет создать файл setup.py для вашего пакета. Убедитесь, что у вас установлены последние setuptools и pip. Затем выполните следующее:

python setup.py bdist_wheel

Это создаст файл колеса для вашего пакета. Это предполагает, что у вас нет заголовков C/C++, библиотек DLL и т. д. Если они есть, то, вероятно, у вас будет гораздо больше работы.

Чтобы получить зависимости, вам нужно создать файл requirements.txt и запустить следующее:

pip wheel -r requirements.txt

Если вашего пакета нет в PyPI, вам придется вручную скопировать файл колеса вашего пакета в папку колеса, которую создает эта команда. Для получения дополнительной информации см. следующую прекрасную статью:

person Mike Driscoll    schedule 26.09.2014
comment
Изменилась ли необходимость вручную копировать колеса для пакетов, которых нет в PyPi, с 2014 по 2018 год? не нашел официального обсуждения - person ctj232; 21.08.2018
comment
Вы можете использовать pip для установки, используя путь к файлу колеса или URL-адрес вместо PyPI. - person Mike Driscoll; 22.08.2018
comment
Чтобы установить колеса зависимостей, используйте команду: pip install --no-index --find-links=/local/wheels -r requirements.txt - person Neeraj Gulia; 12.06.2019
comment
Не подскажете, как в него включить файлы типа dll, exe и т.д.? Спасибо! - person Ann Zen; 23.11.2020
comment
Ваша команда создает одно колесо для каждого пакета PyPi, а это не то, чего хотят люди. - person rjurney; 28.04.2021

С последними pip и wheel вы можете просто запустить

pip wheel .

в папке вашего проекта, даже если ваше приложение не на PyPi. Все колеса будут храниться в текущем каталоге (.).

Чтобы изменить выходной каталог (например, на ./wheels), вы можете использовать параметр -w / --wheel-dir:

pip wheel . -w wheels

Все доступные параметры перечислены в документации по pip.

person jtpereyda    schedule 03.12.2015
comment
Он ищет мои локальные пакеты на pypi, поэтому он терпит неудачу. Вместо этого я сначала запускаю python setup.py bdist_wheel, а затем запускаю pip wheel -r requirements.txt для пакетов pypi. - person guneysus; 04.10.2016
comment
Я только что попробовал, и он по умолчанию записывает файлы колес в ваш рабочий каталог (не ./wheelhouse). Кроме того, есть идеи, как указать имя выходного файла? Я ничего не вижу в документах. - person weberc2; 16.07.2019
comment
Это дает мне миллион колес. Как мне получить один большой файл колеса? - person rjurney; 28.04.2021
comment
@rjurney Wheels не предназначен для того, чтобы быть одним установщиком для всех зависимостей. Вы можете добавить --no-deps только для сборки вашего проекта. На самом деле pip wheel --no-deps -w dist . очень похож на python setup.py bdist_wheel. - person Corbie; 30.07.2021
comment
@Corbie да, я хотел wagon - github.com/cloudify-cosmo/wagon - zip файл всех колес. Databricks и другие системы используют этот формат, чтобы избежать необходимости загружать или интегрировать миллион колес. - person rjurney; 31.07.2021