假设我有一个名为dll
的{{1}}文件,我有一个名为banana.dll
的模块,它会使用banana.py
来加载ctypes
,并且它们存储在同一目录中,例如Windows中的banana.dll
。
现在我在其他目录(例如c:\Python27\lib
)中创建一个名为testing.py
的新python文件,该文件将导入c:\user\desktop
模块。但由于当前工作目录是存储banana.py
的目录。所以我需要通过硬编码手动将目录更改为testing.py
。
但是,有更聪明的方法可以搜索存储c:\Python27\lib
的路径吗?
答案 0 :(得分:1)
如果安装了pywin32:
import _win32sysloader
mod = 'banana'
path_to_mod = _win32sysloader.GetModuleFilename(mod) or _win32sysloader.LoadModule(mod)
或者
import win32api
mod = 'banana'
path_to_mod = win32api.GetModuleFileName(win32api.LoadLibrary(mod))
如果您没有pywin32,可以使用ctypes访问win32 api:
import ctypes
from ctypes.wintypes import HANDLE, LPWSTR, DWORD
GetModuleFileName = ctypes.windll.kernel32.GetModuleFileNameW
GetModuleFileName.argtypes = HANDLE, LPWSTR, DWORD
GetModuleFileName.restype = DWORD
mod = 'banana'
MAX_PATH = 260
dll = ctypes.CDLL(mod) or ctypes.WINDLL(mod)
buf = ctypes.create_unicode_buffer(MAX_PATH)
GetModuleFileName(dll._handle, buf, MAX_PATH)
path_to_mod = buf.value
不要忘记处理WindowsError和其他可能的异常。
答案 1 :(得分:0)
尝试:
import banana
import os.path
module_dirname = os.path.dirname(banana.__file__)