如何使用运行 Windows .exe 的 Python 脚本链接到 conda 环境中的 .dll?

Posted

技术标签:

【中文标题】如何使用运行 Windows .exe 的 Python 脚本链接到 conda 环境中的 .dll?【英文标题】:How to link to .dlls in conda environment using a Python Script running a Windows .exe? 【发布时间】:2021-02-02 16:24:21 【问题描述】:

我正在使用一个脚本来填充具有自定义功能的 Structure-from-Motion 软件 COLMAP。 这个脚本通常是为 linux 分发的,我不得不在 Windows 10 中做一些调整。

脚本通过以下方式调用 COLMAP:

cmd = [
        str(colmap_path), 'feature_importer',
        '--database_path', str(database_path),
        '--image_path', str(image_dir),
        '--import_path', str(dummy_dir),
        '--ImageReader.single_camera',
        str(int(single_camera))]
    ret = subprocess.call(cmd)
    if ret != 0:
        logging.warning('Problem with feature_importer, exiting.')
        exit(ret)

对于colmap_path,我链接到 colmap.exe 并执行它,但缺少存储在单独文件夹中的 .dll。程序结构如下:

C:/COLMAP/bin/colmap.exe(和其他 *.exe) C:/COLMAP/lib/*.dll C:/COLMAP/lib/platforms/qwindows.dll

我的尝试是将 .dll 文件复制到 /anaconda3/envs/my_env 但随后出现错误:

qt.qpa.plugin:在“”中找不到 Qt 平台插件“windows” 此应用程序无法启动,因为没有 Qt 平台插件可以 被初始化。重新安装应用程序可能会解决此问题。

那么是否可以直接链接到ret = subprocess.call(cmd)中的.dll和平台?

【问题讨论】:

【参考方案1】:

我在另一个 website 上找到了解决方案。我不得不将包含 qwindows.dll 的平台文件夹复制到 bin 文件夹中。这可作为许多不同应用程序的解决方案,可通过 .exe 执行; subprocess.call 然后能够找到 qt 平台插件并且脚本运行没有错误。

【讨论】:

以上是关于如何使用运行 Windows .exe 的 Python 脚本链接到 conda 环境中的 .dll?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试通过 Windows 调度程序运行的 exe? [复制]

如何使用运行 Windows .exe 的 Python 脚本链接到 conda 环境中的 .dll?

如何使用 sqlite3.exe 命令行工具自动化进程?

如何将exe注册为windows服务,直接从后台运行

我正在尝试使用 cx_Freeze (windows) 将 PyEnchant 库包含到我的 exe 文件中

使用 windows api 和 C++,我如何从硬盘驱动器加载 exe 并在自己的线程中运行它?