Получите путь к консольным командам Python, установленным как «entry_points», с помощью распределителя

Я устанавливаю консольную команду, используя entry_point dict в настройках. .py. Это создает файл python по некоторому пути в системе (например, поскольку root в debian — /usr/local/bin), который может меняться в зависимости от системы или использования virtualenvs.

Мне нужен путь по умолчанию для скриптов, установленных как entry_points с setup.py


person Jorge E. Cardona    schedule 20.03.2012    source источник
comment
Можете ли вы более четко объяснить, о чем вы спрашиваете? Я не вижу здесь правильно сформулированного вопроса.   -  person Paragon    schedule 20.03.2012
comment
Может быть, вы также примете некоторые из ваших других ответов? до свидания   -  person jdi    schedule 20.03.2012
comment
В setup.py вы можете описать console_command как точку входа (packages.python .org/distribute/) эти команды создаются по какому-то пути в системе, я хочу знать, есть ли способ проверить этот путь, не предполагая, что он /usr/local/bin/, потому что, если вы установите пакет внутри virtualenv, он будет по другому пути.   -  person Jorge E. Cardona    schedule 20.03.2012
comment
как вы любите его использовать? Например, в классе setuptools.command.install_scripts есть атрибут install_dir (его можно получить в setup.py, если создать его подкласс)   -  person jfs    schedule 20.03.2012


Ответы (1)


Расположение может варьироваться в зависимости от различных аргументов setup.py, включая --home, --user, --prefix, --install-scripts и так далее.

Если сценарий уже существует, лучший способ найти его — просмотреть содержимое в $PATH в поисках исполняемого файла (например, команды which), но это может быть не то, что вам нужно.

Модуль distutils.sysconfig может оказаться более полезным.

$ export WORKON_HOME='/tmp/so'
$ mkvirtualenv blah
$ python
Python 2.7.2
>>> import os
>>> import distutils.sysconfig
>>> pre = distutils.sysconfig.get_config_var("prefix")
>>> bindir = os.path.join(pre, "bin")
>>> print bindir
/tmp/so/blah/bin

.. это каталог, в котором, например, pyflakes заканчивается, если я запускаю pip install pyflakes

Словарь get_config_vars может быть полезен, если вам нужно найти более конкретное место:

>>> [(k, v) for (k, v) in distutils.sysconfig.get_config_vars().items() if "/tmp/so" in str(v)]
[('prefix', '/private/tmp/so/blah'), ('exec_prefix', '/private/tmp/so/blah')]

Вы можете более удобно получить доступ к некоторым из этих переменных через модуль sys, включая sys.prefix и sys.execprefix.

person dbr    schedule 20.03.2012
comment
Спасибо, это решает мою проблему, и спасибо за редактирование вопроса: D - person Jorge E. Cardona; 20.03.2012
comment
Я просто отметил в документах, что sys.prefix поможет, так как без использования distutils.sysconfig.get_config_var("prefix") - person Jorge E. Cardona; 20.03.2012
comment
@JorgeEduardoCardona Нет проблем! Я отредактировал ответ, упомянув sys.prefix и т. д., хороший момент - person dbr; 21.03.2012
comment
Но как быть с окнами? Есть ли кроссплатформенный метод? - person betontalpfa; 19.11.2020