Изградете колело/яйце и всички зависимости за проект на 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
OP може да превключи правилния отговор 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 файл за вашия пакет. Уверете се, че имате инсталирани най-новите инструменти за настройка и 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 - a zip файл на всички колела. Databricks и други системи използват този формат, за да избегнат милиони колела за качване или интегриране. - person rjurney; 31.07.2021