Автоматическое добавление установленного пакета PIP в path
Для моего пакета, foo, я использую следующее setup.py:
from setuptools import setup
setup(name='foo',
version='0.0.1',
description='Lol',
url='https://github.com/foo/foo',
author='legend',
author_email='lol@gmail.com',
license='GPLv3',
packages=['foo'],
install_requires=["bar"],
entry_points = {'console_scripts': ['foo = foo:main']},
keywords = ['foo'],
zip_safe=False)
При тестировании на моей Arch-системе он автоматически добавлял скрипт в PATH, поэтому я мог просто запустить foo
в командной строке, и он автоматически запускал функцию main (). Затем я загрузил виртуальную машину и протестировал ее на Windows 7. Пип установил пакет просто отлично, но он не был на моем пути!
Помощь?
2 ответа:
setuptools
,pip
иeasy_install
Не изменяйте переменную системного пути. Каталог<python directory>\Scripts
, где все они по умолчанию устанавливают скрипт, обычно добавляется в PATH установщиком Python во время установки.Если папка scripts не была добавлена в ваш путь во время установки, вы можете исправить это, запустив
<python directory>\Tools\scripts\win_add2path.py
. (См. Как я могу найти, где установлен Python на Windows?)
Приведенный выше пример setup.py файл работал нормально для меня (со скриптами каталог в пути), кстати. Я проверил его с помощью
python setup.py bdist_wheel pip install dist\foo-0.0.1-py3-none-any.whl
И
python setup.py sdist pip install dist\foo-0.0.1.zip
Не ожидайте, что
pip
илиeasy_install
изменят вашPATH
, их задача-установить пакет в текущую среду.В Linux, если вы используете глобальную среду Python, вам, вероятно, потребуются привилегии root, поэтому вы обычно делаете:
$ sudo pip install <package>
Однако этот метод не рекомендуется, так как он портит общесистемную среду Python (представьте себе, что два приложения имеют немного разные требования к одной и той же версии пакета, и у вас может возникнуть проблема).
Рекомендуется метод заключается в использовании некоторого вида virtualenv, который позволяет установить пакет python в отдельную среду python, которую также легко удалить и воссоздать.
Как я устанавливаю скрипты на основе python в систему
Похоже, что у вас есть пользовательский скрипт на основе python, который вы хотите использовать в своей системе.
Для этого сценария я использую следующий метод (предполагая, что инструмент
virtualenv
установлен в общесистемный python):$ mkdir ~/apps $ mkdir ~/apps/myutil $ cd ~/apps/myutil $ virtualenv .env $ source .env/bin/activate (.env)$ pip install <package-or-more>
Теперь вы будете иметь в
~/apps/myutil/.env/bin
директории установлен весь скрипт, установленный поpip
, назовем егоmyscript
(может быть и больше).Оставшимся шагом является создание символьной ссылки из некоторого каталога, который уже находится на
PATH
, например в/usr/local/bin
:$ cd /usr/local/bin $ sudo ln -s ~/apps/myutil/.env/bin/myscript
Отныне вы сможете вызывать команду
myscript
даже без активации virtualenv.Обновление скрипта
Если вам нужно установить более позднюю версию скрипта:
$ cd ~/apps/myutil $ source .env/bin/activate (.env)$ pip install --upgrade <package-or-more>
Как только вы свяжете скрипт, он будет доступен автоматически. в последней версии.
Именование с помощью virtualenvwrapper
virtualenvwrapper
позволяет создавать несколько именованных virtualenvs и легко активировать их. дезактивация. В таком случае я делаю следующее:$ mkvirtualenv bin-myscript (bin-myscript)$ pip install <package-or-more> (bin-myscript)$ which `myscript` ~/.Evns/bin-myscript/bin/myscript (bin-myscript)$ cd /usr/local/bin (bin-myscript)$ sudo ln -s ~/.Evns/bin-myscript/bin/myscript
Апгрейд еще проще:
$ workon bin-myscript (bin-myscript)$ pip install --upgrade <package-or-two>
И вы закончили
Альтернатива с tox
tox
это отличный инструмент для автоматизированного создания виртуальных машин и тестирования. Я использую его для создания virtualenvs в каталогах мне нравится. Для получения дополнительной информации см. мой другой так ответь