我有一个wrapper.py包含C DLL 的Python模块.DLL与模块位于同一文件夹中.因此,我使用以下代码加载它:
myDll = ctypes.CDLL("MyCDLL.dll")
Run Code Online (Sandbox Code Playgroud)
如果我wrapper.py从自己的文件夹执行,这是有效的.但是,如果我从其他地方运行它,它就会失败.那是因为ctypes计算相对于当前工作目录的路径.
我的问题是,有没有一种方法可以指定相对于包装器而不是当前工作目录的DLL路径?这将使我能够将两者组合在一起,并允许用户从任何地方运行/导入包装器.
Mat*_*hen 25
您可以使用os.path.dirname(__file__)获取Python源文件所在的目录.
fma*_*ark 13
扩展马修的答案:
import os.path
dll_name = "MyCDLL.dll"
dllabspath = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + dll_name
myDll = ctypes.CDLL(dllabspath)
Run Code Online (Sandbox Code Playgroud)
这只能用于脚本,而不是控制台,也不能用于py2exe.
我总是将我的DLL所在的目录添加到路径中.这样可行:
os.environ['PATH'] = os.path.dirname(__file__) + ';' + os.environ['PATH']
windll.LoadLibrary('mydll.dll')
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用py2exe,这不起作用(因为__file__未设置).在这种情况下,您需要依赖该sys.executable属性(http://www.py2exe.org/index.cgi/WhereAmI上的完整说明)
| 归档时间: |
|
| 查看次数: |
30378 次 |
| 最近记录: |