2013-03-04 63 views
22

我想在系統上發現一個模塊,我沒有對全局site-packages目錄的寫訪問權限,也沒有更改環境(PYTHONPATH)。我試圖將.pth文件放在與正在執行的腳本相同的目錄中,但似乎被忽略。例如,我創建了一個文件extras.pth,內容如下:使用.pth文件

N:\PythonExtras\lib\site-packages 

但下面的腳本,放置並運行在同一個目錄,打印False

import sys 
print r"N:\PythonExtras\lib\site-packages" in sys.paths 

唯一的目錄中sys.path,而我有寫權限是包含腳本的目錄。是否有另一個(目前不存在的)目錄,我可以放置extras.pth並且可以看到它?有沒有更好的方法來解決這個問題?

我在Windows上使用python 2.7。我在這裏可以找到的所有.pth問題都使用系統模塊目錄。

編輯:我已經追蹤了Windows用戶安裝目錄%APPDATA%\Python\Python27\site-packages。我可以在那裏放置一個模塊,它將被導入,但如果我在那裏放置一個.pth文件,它不起作用。這真的不應該工作,或者我做錯了什麼?

回答

37

the documentation中所述,只有在PTH文件位於site-packages目錄中時纔會處理PTH文件。 (更確切地說,如果它們處於「站點目錄」中,它們將被處理,但「站點目錄」本身是Python安裝的全局設置,並且不依賴於當前目錄或腳本所在的目錄。)

如果包含腳本的目錄位於sys.path上,則可以在該目錄中創建sitecustomize.py。這將在Python啓動時加載。裏面sitecustomize.py,你可以這樣做:

import site 
site.addsitedir('/some/dir/you/want/on/the/path') 

這不僅會增加該目錄中,但將其添加爲「網站目錄」,引起PTH文件那裏進行處理。如果您想創建自己的個人目錄site-packages,這很方便。

如果您只需要將一個或兩個目錄添加到路徑中,則可以更簡單地完成。只需創建一個小型Python庫,即可操縱sys.path,然後從腳本中導入該庫。喜歡的東西:

# makepath.py 
import sys 
sys.path.append('/whatever/dir/you/want') 

# script.py 
import makepath 

編輯:再次,根據the documentation,有一個特定的網站目錄中%APPDATA%\Python\PythonXY\site-packages(在Windows上)的可能性。你可以嘗試一下,如果實際上你有寫權限(而不僅僅是你的腳本目錄)。

+0

問題是這是爲了教授課程,我試圖讓它儘可能地接近透明。人們總是開始一個新的python並陷入困境。 'Documents and Settings'下沒有一些文件夾可以算作「網站目錄」嗎? IIRC的各種安裝程序將把東西放在那裏 - 但不知道在哪裏,或者是否檢查了.pth文件。 – alexis 2013-03-04 19:18:31

+0

是的,有,並且在http://docs.python.org/2/library/site.html#site.USER_SITE中記錄了其他所有內容。我以爲你說過你只能訪問腳本目錄,但現在我看到我誤讀了。 – BrenBarn 2013-03-04 19:28:04

+0

是的,謝謝,我正在搞清楚那個網站。html'是看的地方。然而,在那裏放置一個'.pth'似乎沒有工作... – alexis 2013-03-04 19:43:06