3

假设我有一个dll名为 的文件banana.dll,并且我有一个名为的模块banana.py,它将用于ctypes加载banana.dll,并且它们存储在同一目录中,例如c:\Python27\lib在 Windows 中。

testing.py现在我在其他目录(例如)中创建一个新的 python 文件c:\user\desktop,它将导入banana.py模块。但是由于当前工作目录testing.py是存储的目录。所以我需要c:\Python27\lib通过硬编码手动将目录更改为。

但是有没有更聪明的方法可以搜索banana.dll存储路径?

4

2 回答 2

3

如果您安装了 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 和其他可能的异常。

于 2013-05-20T23:22:55.607 回答
0

尝试:

import banana
import os.path

module_dirname = os.path.dirname(banana.__file__)
于 2012-06-13T03:45:51.540 回答