2011-12-27 53 views
2

我來自使用Autotools(./configure,make,make install)的C背景,但最近開始使用Python。通過Autotools,我可以通過執行./configure --prefix=/foo/bar或多或少地在系統的任何位置安裝程序。我發現大多數Python程序都使用基於distutils的類似系統,通常在名爲setup.py的文件中。但是,我注意到如果我將項目安裝在非標準目錄中,例如通過執行python setup.py install --prefix /foo/bar,則/foo/bar/bin中的腳本將無法拾取安裝到/foo/bar/lib/pythonx.y/site-packages中的程序包。如何使用自定義前綴安裝lib目錄到sys.path

我假設我不得不在該腳本執行時將該目錄添加到sys.path。我如何以穩定的跨平臺方式做到這一點?還是我應該做點別的?

回答

1

如果您的自定義安裝目錄是「富」,你的Python根是「酒吧」和你的包根是「LIB」 您可以添加到您的腳本:

import sys 
from os.path import join 
foo = "foo" 
bar = "bar" 
lib = "lib" 
newbase = join(foo, bar, lib) 
sys.path.append(newbase) 
在你的榜樣

foo ='foo' 
bar = 'bar' 
lib = '/lib/pythonx.y/site-packages' 
+0

謝謝,但我不認爲這將解決問題。我不知道該程序將安裝在哪裏。它可能在文件系統中的任何地方。我將不得不使用相對路徑並考慮到x.y根據所安裝的Python版本而不同。 –

+0

如果你正在使用distutils,並且不怕弄髒你的手,你可能會嘗試調整安裝腳本。文檔部分,這可能是有用的:http://docs.python.org/distutils/apiref.html#module-distutils.sysconfig –

+0

也請注意,鎮上的新警長似乎是點子:http: //pypi.python.org/pypi/pip –

0

另一種常見的工具是使用的virtualenv創建另一個Python庫是不是全系統的一個安裝在它裏面你的包。

>> pip install virtualenv 
>> virtualenv --distutils test_env 
>> source ./test_env/bin/activate 
>> cd <your package> 
>> python setup.py install 
相關問題