2013-12-19 3 views
0

Я пытаюсь создать репозиторий github, который можно запустить из любого клона без зависимостей каталога hardcoding.sys.path.append модули относительно пути запуска скрипта

Допустим, в моем репо у меня есть питон скрипт называется myscript.py и он расположен по адресу:

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

Но я знаю, что мой сценарий зависит от общих инструментов полезности всегда расположены по адресу:

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

Таким образом, как я могу сказать, мой сценарий всегда загружать myutils.py, где относительный путь к myutils.py относительно myscript.py всегда ../myutils/myutils.py

на нет ж 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

Смежные вопросы