2012-03-20 4 views
1

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

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

+0

Можете ли вы уточнить, о чем вы спрашиваете? Я не вижу здесь правильного вопроса. – Paragon

+0

Можете ли вы также принять некоторые из ваших других ответов? Bye – jdi

+1

В setup.py вы можете описать команду console_command как entry_point (http://packages.python.org/distribute/setuptools.html#automatic-script-creation), эти команды создаются по определенному пути в системе, я хочу знать, есть ли способ проверить этот путь без предположения, это '/ usr/local/bin /', потому что если вы установите пакет внутри virtualenv, он будет по другому пути. –

ответ

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 

..which это каталог, в котором, например 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

+0

Спасибо, это решает мою проблему и благодарит за редактирование в вопросе : D –

+0

Я только что отметил в документах, что 'sys.prefix' поможет как без использования' distutils.sysconfig.get_config_var ("prefix") ' –

+0

@JorgeEduardoCardona Нет проблем! Я отредактировал ответ, чтобы упомянуть 'sys.prefix' и т. Д. Также, хорошая точка – dbr