簡而言之 - 我需要獲取console_script以將當前運行路徑返回給我,以便我可以覆蓋它在運行時使用的模塊。獲取python控制檯腳本的運行路徑
這裏是我的基本設置(概括爲盡我所能):
package_1:
caller_module.py
console_script_module:
main.py
dir_of_modules_to_use/
a.py
b.py
c.py
setup.py
setup.py contents:
setup(
entry_points = {
'console_scripts': [
'console-script-module = console_script_module.main:main'
]
}
)
不再詳述: 所以caller_module.py電話控制檯的腳本模塊通過發出一個子進程調用。依次運行dir_of_modules_to_use中看到的模塊。我希望在通過單獨的腳本發生這種情況之前,通過覆蓋它們來提供我自己的這些模塊版本。爲了做到這一點,我需要知道其中控制檯腳本模塊已安裝的運行路徑,因爲它不一致(例如,virtualenv的更改)。
我試圖增加這main.py,並使用一個單獨的命令行參數來調用它:
def print_absoulute_dir():
print os.path.abspath('dir_of_modules_to_use')
不幸的是這隻返回的地方我撥打電話到控制檯腳本的路徑。
免責聲明 - 這是哈克和可怕的,我知道,這是從我繼承的代碼,我只是需要一些短期的工作。我遺憾地無法在這個時間內更改caller_module.py中的代碼,否則我只會改變它的調用方式console_script_module:main.py。
也許我對setup.py console_script是如何工作/生成的目錄結構是什麼感到困惑。我認爲setup.py安裝只是將文件複製到一個已知的位置,然後別名控制檯腳本調用?所以我認爲應該可以通過編程的方式找到它的安裝位置。 我試過了你提到的兩個* urllib .__文件__ *返回了「/usr/lib/python2.7/urllib.pyc」,關於console_script_module的* sys.path *的唯一引用是它的egg文件。 「 – rikityplikity
」*或許我對setup.py console_script的工作方式感到困惑*「 看起來情況非常如此:-)從* sys.path *調用中返回egg文件,其中包含我的控制檯腳本從中運行的目錄。這不是很好,但我可以做的就是調用* sys.path *,在* console_script_module *返回的列表中搜索並從那裏找到* dir_of_modules_to_use * – rikityplikity