Автоматическое добавление установленного пакета 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 5

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 в каталогах мне нравится. Для получения дополнительной информации см. мой другой так ответь