我需要知道代碼對象來自哪裏;其模塊。所以我(天真)嘗試:如何找到代碼對象來自哪個文件?
os.path.abspath(code.co_filename)
但是,這可能會或可能無法正常工作,(我認爲這是因爲ABSPATH取決於CWD)
任何方式來獲得一個代碼對象的模塊的完整路徑 ?
編輯:
檢查模塊的函數:getfile,getsourcefile,getmodule,只獲取文件名,而不是它的路徑(與co_filename相同的東西)。也許他們使用abspath。
我需要知道代碼對象來自哪裏;其模塊。所以我(天真)嘗試:如何找到代碼對象來自哪個文件?
os.path.abspath(code.co_filename)
但是,這可能會或可能無法正常工作,(我認爲這是因爲ABSPATH取決於CWD)
任何方式來獲得一個代碼對象的模塊的完整路徑 ?
編輯:
檢查模塊的函數:getfile,getsourcefile,getmodule,只獲取文件名,而不是它的路徑(與co_filename相同的東西)。也許他們使用abspath。
inspect.getsourcefile()
函數就是你所需要的,它會返回找到對象源的文件的相對路徑。
nope,只是文件名 – dugres
inspect.getsourcefile(os.path)返回了'/usr/lib/python2.7/posixpath.py'(看起來返回的路徑是依相關情況而定,相對或絕對)。 – MatToufoutu
是的,這取決於上下文(像abspath),這就是問題所在,我不會依賴它。 – dugres
如果您有權訪問該模塊,請嘗試module.__file__
。
>>> import xml
>>> xml.__file__
'/usr/local/lib/python2.6/dist-packages/PyXML-0.8.4-py2.6-linux-i686.egg/_xmlplus/__init__.pyc'
如果你不這樣做,這樣的事情應該工作:
>>> import xml.etree.ElementTree as ET
>>> thing = ET.Element('test')
>>> __import__(thing.__module__).__file__
'/usr/local/lib/python2.6/dist-packages/PyXML-0.8.4-py2.6-linux-i686.egg/_xmlplus/__init__.pyc'
在這種情況下,我們使用的事實,進口可以被稱爲在模塊的字符串版本,它返回實際的模塊對象,然後在那上調用__file__
。
你到底在找什麼?你從示例代碼中得到了什麼輸出,以及你期望的是什麼? –
@Shaw Chin:我只得到文件的名稱,我需要它的完整路徑。 – dugres
奇怪。它是什麼樣的代碼對象? –