我分配具有此結構的包:在Python distutils中從setup.py查找腳本目錄的正確方法?
mymodule:
mymodule/__init__.py
mymodule/code.py
scripts/script1.py
scripts/script2.py
的mymodule
子目錄的mymodule
包含代碼和scripts
子目錄包含的腳本,應該是由用戶執行。
當setup.py
描述包安裝,我用:
scripts=['myscripts/script1.py']
要指定腳本應該去。在安裝期間,他們通常會進入某個平臺/用戶特定的bin
目錄。我在mymodule/mymodule
中的代碼需要調用腳本。然後找到這些腳本的完整路徑的正確方法是什麼?理想情況下,他們應該是用戶的路徑上,在這一點上,所以如果我想將它們從殼叫喚,我應該能夠做到:
os.system('script1.py args')
但我希望通過它的絕對路徑調用腳本,而不是依賴於特定平臺的bin目錄正對PATH
,如:
# get the directory where the scripts reside in current installation
scripts_dir = get_scripts_dir()
script1_path = os.path.join(scripts_dir, "script1.py")
os.system("%s args" %(script1_path))
如何才能做到這一點?謝謝。
編輯刪除腳本以外的代碼對我來說不是一個實際的解決方案。原因是我分配任務到集羣系統和我平時就是這個樣子的方法:想象你有一組要運行的任務。我有一個腳本將所有任務作爲輸入,然後調用另一個腳本,該腳本只在給定任務上運行。喜歡的東西:
main.py:
for task in tasks:
cmd = "python script.py %s" %(task)
execute_on_system(cmd)
所以main.py
需要知道script.py
是,因爲它需要通過execute_on_system
一個命令來執行。
相關:[確定distutils的數據的位置文件編程在Python?](http://stackoverflow.com/q/8628495/95735 ) –
如何'execute_on_system()'什麼樣子的? –
@PiotrDobrogost:'execute_on_system'作爲輸入對應於外殼命令的字符串。然後,它創建了一個名爲臨時文件'cmd.sh'和它把命令中,陳述工作應該如何運行(具體到集羣系統在用戶的系統上使用)必要的前綴一起 - 例如什麼隊列中的作業應該進入,等等。然後它需要這個腳本,'cmd.sh'並以系統特定的方式執行它,例如通過做:'os.system(「qsub cmd。sh「) – user248237dfsf