2013-02-27 51 views
33

我的代碼是:集PYTHONPATH

import scriptlib.abc 
import scriptlib.xyz 

def foo(): 
    ... some operations 

但腳本庫是在一些其他的目錄,所以我必須包括在環境變量「PYTHONPATH」該目錄。

反正在我可以在環境變量「PYTHONPATH」 import語句之前,先添加腳本庫目錄就像得到執行:

import sys 
sys.path.append('/mypath/scriptlib') 
import scriptlib.abc 
import scriptlib.xyz 

def foo(): 
    ... some operations 

如果是這樣,只對命令提示符的價值或者是全球?

在此先感謝

+1

你嘗試其他可能的方法是什麼?該代碼應該正常工作。 sys的新值。path'對你的程序來說是本地的('$ PYTHONPATH'變量只有在啓動解釋器來填充'sys.path'時纔會被讀取,它不會被寫回到環境中)。 – filmor 2013-02-27 10:23:44

+0

是的,它工作 – DKG 2013-02-27 11:49:07

回答

34

這將添加到您的Python程序/實例的路徑(即運行可執行文件)。該路徑不會被其他Python進程修改。另一個正在運行的Python程序不會修改它的路徑,並且如果退出程序並再次運行,那麼路徑將不包含之前添加的內容。你在做什麼通常是正確的。

set.py:

import sys 
sys.path.append("/tmp/TEST") 

loop.py

import sys 
import time 
while True: 
    print sys.path 
    time.sleep(1) 

運行:python loop.py &

這將運行loop.py,連接到標準輸出,並且將繼續運行在背景中。然後您可以運行python set.py。每個都有一組不同的環境變量。請注意0​​的輸出不會更改,因爲set.py不會更改loop.py的環境。

了一份關於進口

Python導入是動態的,就像語言的其餘部分。沒有靜態鏈接正在進行。導入是一個可執行的行,就像sys.path.append...一樣。

+0

但我不想在我的代碼中的路徑。我希望我的代碼乾淨和便攜。沒有「蟒蛇項目」的概念嗎? (對於Visual-studio-code或Atom.io來說)? – pashute 2017-11-05 07:45:52

+0

是的,相當於Python的「項目」是VirtualEnv。 VirtualEnvWrapper是一個很好用的界面。這和Visual Studio的區別在於已經有了一個全局的Python環境,而virtualenv只是在上面創建了一個虛擬層。可能還有其他工具,我已經遠離Python幾年了。 – Joe 2017-11-06 15:28:22

5

也在文檔here中注意到。
轉到Python X.X/Lib和這些行添加到site.py那裏,

import sys 
sys.path.append("yourpathstring") 

這會改變你的sys.path使每個負載,它將在它該值..

如前所述heresite.py

該模塊在初始化期間自動導入。導入此模塊會將特定於站點的路徑附加到模塊搜索路徑並添加一些內置項。

用於添加到sys.path一些路見these docs

+0

,但這與手動設置環境變量中的值相同。我需要的是頻繁地更改庫的路徑,就像從文件中獲取scriptlib路徑並在使用它之前進行設置一樣。 – DKG 2013-02-27 10:42:59

+0

不,這個值會附加在python.exe的每次運行中,因爲'site.py'在初始化過程中會自動加載。所以,你不需要'import sys sys.path.append ....'在每個文件中。 – pradyunsg 2013-02-27 10:46:25

+1

考慮一下我有兩份相同的python腳本的情況。 一個腳本想從C:\ testers \ scriptlib獲取庫,並從D:\ developer \ scriptlib獲取其他需要的庫。在那種情況下,site.py如何確定分配哪個路徑&誰。 – DKG 2013-02-27 11:20:33