2013-12-19 64 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