"Встановлення файлу - придатне ./" проти "python setup.py розвивати"


178

Чи є якась істотна різниця між

pip install -e /path/to/mypackage

і варіант setuptools?

python /path/to/mypackage/setup.py develop

1
Це здається оновлене посилання, що описує режим розробки: setuptools.readthedocs.io/en/latest/…
PaulR

якщо вас цікавить видалення (пакети в режимі розробки / редагування), спробуйте це питання: stackoverflow.com/questions/17346619/…
Чарлі Паркер

Відповіді:


131

Постарайтеся уникати дзвінків setup.pyбезпосередньо, це не буде правильно повідомляти pip, що ви встановили свій пакет.

З pip install -e:

Для місцевих проектів створюється каталог “SomeProject.egg-info” щодо шляху проекту. Це одна перевага перед просто використанням setup.py develop, яка створює “яєчну інформацію” безпосередньо відносно поточної робочої каталоги.

Детальніше: док

Читайте також документи setuptools .


Чи повинен користувач знову запустити 'python setup.py sdist' після внесення змін до файлу, щоб зміни набрали чинності?
змінна

однак якщо вам потрібно налагодити (сам файл setup.py) із „set_trace“, тоді „python setup.py razvija“ робить можливим
mirek

Друга URL-адреса зламана.
bad_coder

Обидва працюють на мене.
sobolevn

76

Ще одна відмінність: pip install -eвикористовує колесо, а python setup.py develop
не використовує його.

З install, ви можете домогтися такої ж поведінки, використовуючи
pip install -e /path/to/package --no-use-wheel

Більше інформації про колеса: колеса пітона


18
Зауважте, що відповідно до pip.pypa.io/en/stable/reference/pip_install , ВИМОГА--no-use-wheel на користь--no-binary :all:
Nzbuu

Чи можемо ми зробити pip install -e для пакета, виготовленого за допомогою sdist?
змінна

36

Іншою відмінністю , що може сприяти в pip install -eтому , що якщо ваш проект має залежності в install_requiresв setup.py, а потім pip install -e .встановлює залежності з ПУМ, а python setup.py developможна встановити з easy_install, і може викликати проблеми знову: «яєчного-інфо» , як уже згадувалося вище. Якщо install-requiresвикористовується dependency_linksз користувацькими URL-адресами git, із доданими ідентифікаторами яєць, це може бути особливо прикро.


1
це повністю пояснює, чому мій приватний пакет не вдалося встановити. це на моєму сервері devpi не pypi. Дякую.
ckot

Коли ви говорите, що пакет стає редагованим, ви маєте на увазі, що користувачеві доведеться знову запустити "python setup.py sdist" після внесення змін до файлу пакета? Або виконання вищевказаної команди не потрібно?
змінна

@variable, коли ви встановлюєте локальний пакет із pip install -e ., він по суті робить символьне посилання у відповідному каталозі пакунків сайтів Python, щоб вказати на вашу робочу копію. Оскільки зміни коду вносяться до цієї робочої копії, вона моментально відображається у "встановленій" версії, тому вам не потрібно повторно запускати інсталяційні команди під час проходження. Це в першу чергу корисно для розробки в сховищі, яке представляє інстальований пакет, але також може бути зручним, наприклад, для написання деякої колекції модулів з абсолютним імпортом тощо
ely

0

Ще одна відмінність: коли ви запускаєте python setup.py developверсію, яка вважається попередньою версією (можливо, тому, що ви запускаєте її з клона git, коли не перевірили випуск), тоді ви включите встановлення попередніх випусків ваших залежностей . З іншого боку, pip install --editableвам потрібно буде --preявно пройти, якщо ви хочете ці попередні випуски.

(Дивіться журнал CI з попередньо випущеними випадково використаними порівняннями та порівняйте їх із фіксованою збіркою тут .)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.