2012-12-04 65 views
0

簡而言之 - 我需要獲取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

回答

0

我不知道如果我真的能理解你想要什麼,但每個Python模塊具有__file__ 屬性,其中包含其位置在文件系統中, 您可以使用sys.path中修改Python模塊搜索路徑

import urllib 
import sys 

print urllib.__file__ 
print sys.path 
+0

也許我對setup.py console_script是如何工作/生成的目錄結構是什麼感到困惑。我認爲setup.py安裝只是將文件複製到一個已知的位置,然後別名控制檯腳本調用?所以我認爲應該可以通過編程的方式找到它的安裝位置。 我試過了你提到的兩個* urllib .__文件__ *返回了「/usr/lib/python2.7/urllib.pyc」,關於console_script_module的* sys.path *的唯一引用是它的egg文件。 「 – rikityplikity

+0

」*或許我對setup.py console_script的工作方式感到困惑*「 看起來情況非常如此:-)從* sys.path *調用中返回egg文件,其中包含我的控制檯腳本從中運行的目錄。這不是很好,但我可以做的就是調用* sys.path *,在* console_script_module *返回的列表中搜索並從那裏找到* dir_of_modules_to_use * – rikityplikity

相關問題