2012-03-20 49 views
1

我在setup.py中使用entry_point dict安裝控制檯命令。這會在系統中的某個路徑中創建一個python文件(例如,作爲debian中的根目錄是/usr/local/bin),這可以根據系統或如果使用virtualenvs進行更改。獲取安裝爲'entry_points'並分發的python控制檯命令的路徑

我需要安裝的腳本的默認路徑與setup.py

+0

你能更清楚地詢問你的問題嗎?我在這裏看不到一個結構良好的問題。 – Paragon 2012-03-20 02:43:11

+0

你也可以接受一些其他答案嗎?再見 – jdi 2012-03-20 03:00:43

+1

在setup.py中,你可以將一個console_command描述爲一個entry_point(http://packages.python.org/distribute/setuptools.html#automatic-script-creation)這個命令是在系統的某個路徑中創建的,我想要知道是否有一種方法可以在不假設的情況下檢查該路徑是否爲'/ usr/local/bin /',因爲如果將該軟件包安裝在virtualenv中,它將位於另一個路徑中。 – 2012-03-20 06:30:13

回答

1

位置可根據各種參數setup.py,包括--home--user--prefix--install-scripts等變化entry_points。

如果腳本已經存在,最好的辦法找到它會掃描整個內容$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.prefixsys.execprefix

+0

謝謝,這解決了我的問題,並感謝編輯問題:D – 2012-03-20 16:08:56

+0

我剛剛在文檔中指出,'sys.prefix'將有助於不使用'distutils.sysconfig.get_config_var(「prefix」)' – 2012-03-20 16:52:18

+0

@JorgeEduardoCardona沒問題!我已經編輯了提及'sys.prefix'等的答案,也是很好的一點 – dbr 2012-03-21 01:55:07