2013-12-19 65 views
0

我想創建一個github存儲庫,可以從任何克隆運行而不需要硬編碼目錄依賴關係。sys.path.append模塊相對於正在運行的腳本的路徑

讓我們在我的回購說我有一個Python腳本調用myscript.py其位於:

/d/e/f/github/myrepo/myscript/myscript.py 

但我知道,我的腳本取決於總是位於一般實用工具:

/d/e/f/github/myrepo/myutils/myutils.py 

這樣,我怎麼能告訴我的腳本始終加載myutils.py,其中相對路徑相對於myscript.py myutils.py總是../myutils/myutils.py

由於沒有w^myscript.py樣子:

# Import modules 
import sys 
sys.path.append('/d/e/f/github/myrepo/myutils/') 
import myutils 

正如人們現在可以看到FULLPATH到myutils.py是硬編碼的,所以如果別人克隆他們回購在自己的電腦將無法正常工作。

理想的情況下,用戶應該能夠運行myscript.py如下:

cd /d/e/f/github/myrepo/myscript/ 
python myscript.py -h 

或者,

python /d/e/f/github/myrepo/myscript/myscript.py -h 

它應該不必硬編碼到myutils模塊的完整路徑工作,而只是相對路徑...

回答

0

通過做一些研究似乎這可能是一個可能的答案:

# Import modules 
import subprocess, sys, os 
script_path = os.path.dirname(__file__) 
myutils_path = os.path.join(script_path, '../myutils') 
sys.path.append(myutils_path) 
import myutils 
+0

我不認爲將'myutils'的絕對路徑添加到'sys.path'中是個不錯的主意,因爲它可能會污染'sys.path'。但是最好將'myrepo'的路徑添加到'sys.path'中 – flyer