我正在尝试以编程方式确定特定程序包的包含/安装的DLL文件的路径。我读了无数的SO页,但是找不到任何解决方案。也许我错过了一些东西,这不可能吗?

该软件包是capstone,是通过Cygwin在Windows上通过源代码手动安装的,带有python3绑定(bind)。一切正常。

# python3 -c "import os,inspect,capstone; print(os.path.dirname(inspect.getfile(capstone)))"
/usr/lib/python3.6/site-packages/capstone-4.0.0rc1-py3.6.egg/capstone

# python3 -c "import capstone; print(capstone._lib)"
capstone.dll
  • 上面显示的路径是*.egg文件的路径,但是该路径实际上并不存在,
    除非您解压缩文件。
  • 在EGG文件中,位置在./*.egg/capstone/lib/capstone.dll
  • 但是在操作系统中,capstone.dll的实际系统位置在:
    /usr/lib/python3.6/site-packages/capstone/lib


  • 如何在Python3中获得真实路径(3)?

    编辑:

    也许this可能有用吗?但是我想出了这个丑陋的东西,很容易打破,所以希望有一种更Python化的方式。
    # python3 -c "import capstone; print('DLL path: %s' % capstone._path_list[4] + '/' + capstone.__name__ + '/lib/' + capstone._lib)"
    DLL path: /usr/lib/python3.6/site-packages/capstone/lib/capstone.dll
    

    最佳答案

    我通过复制“安装”了顶点:

  • 我的cwd
  • 中的Python绑定(bind)目录([GitHub]: aquynh/capstone - (master) capstone/bindings/python/capstone)
    二进制文件.zip文件中的
  • capstone.dll,位于#1的目录中。

  • 在开始准备一个详尽(通用)的示例时,我浏览了一下源代码(在开始时,它没有找到.dll,因此需要设置$ {LIBCAPSTONE_PATH}),并注意到.dll路径存储在capstone._path中:)

    输出:

    10-08 00:57