gpt4 book ai didi

python - cx_freeze exe 文件在 anaconda 提示符下有效,但在 Windows cmd 命令提示符下无效?

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:31 26 4
gpt4 key购买 nike

我花了一天的大部分时间尝试从 python 脚本编译 exe 文件并通过 vanilla cmd 命令提示符运行它。我终于成功创建了 exe 文件,但奇怪的是它只在 anaconda 提示符下运行,而不是在 cmd 中运行。

这是完整的错误消息/回溯:

Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
module.run()
File "C:\ProgramData\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
exec(code, m.__dict__)
File "generateKonsekvens.py", line 1, in <module>
File "C:\ProgramData\Anaconda3\lib\site-packages\geopandas\__init__.py", line 1, in <module>
from geopandas.geoseries import GeoSeries
File "C:\ProgramData\Anaconda3\lib\site-packages\geopandas\geoseries.py", line 7, in <module>
from shapely.geometry import shape, Point
File "C:\ProgramData\Anaconda3\lib\site-packages\shapely\geometry\__init__.py", line 4, in <module>
from .base import CAP_STYLE, JOIN_STYLE
File "C:\ProgramData\Anaconda3\lib\site-packages\shapely\geometry\base.py", line 17, in <module>
from shapely.coords import CoordinateSequence
File "C:\ProgramData\Anaconda3\lib\site-packages\shapely\coords.py", line 8, in <module>
from shapely.geos import lgeos
File "C:\ProgramData\Anaconda3\lib\site-packages\shapely\geos.py", line 130, in <module>
os.path.join(sys.prefix, "Library", "lib", "geos_c.dll"),
File "C:\ProgramData\Anaconda3\lib\site-packages\shapely\geos.py", line 56, in load_dll
libname, fallbacks or []))
OSError: Could not find lib geos_c.dll or load any of its variants ['Library\\lib\\geos_c.dll'].

如您所见,它似乎在 anaconda 文件夹中寻找某些内容 - 这违背了卡住脚本的目的。 geos_c.dll 文件属于 fiona/shapely,在本例中是 geopandas 模块的依赖项。 geos_c.dll 文件可以在编译的文件夹(lib/shapely)中找到。

该脚本在正常命令提示符下运行得很好

python generateKonsekvens.py

在文件夹中。

造成这种情况的原因是什么?如何解决?

Python 3.6.3,Windows 10 64 位。

更新

我尝试了 jpeg 的建议,但没有一个起作用(在这些位置找不到 dll)。我尝试了一种临时解决方案,将 dll 手动复制到 Library/lib/geos_c.dll,它复制了一些文件,但给出了相同的错误。然后我尝试使用 build_exe_options = {'include_files': [(os.path.join(sys.prefix, "Library", "bin", "geos_c.dll"), os.path.join("Library", "bin", "geos_c.dll"))]},它会在 anaconda 目录中查找 geos_c.dll 文件。我这次也是通过windows cmd打包的,dll都包含了。然而,错误仍然是一样的......我现在将尝试使用新的、新鲜的 conda anaconda venv,但同时欢迎任何其他想法。

最佳答案

问题可能是由于可执行文件正在寻找 Library/lib/geos_c.dll (由于 Anaconda 打包 shapely 的方式),但是 DLL 由 cx_Freeze 打包进入lib/shapely/geos_c.dll (可能就像使用 shapely 安装 pip 一样)。当您从 Anaconda 提示符运行可执行文件时,回退会在 Anaconda 库路径中查找 DLL,但如果您从 cmd 运行,则该回退不起作用,因为在 cmd 路径中找不到 DLL 的副本。

尝试手动将 DLL 包含在安装目录中,然后后备可能会起作用。您可以使用 build_exe 来执行此操作选项include_files在您的设置脚本中:

import os
import sys
build_exe_options = {'include_files': [os.path.join(sys.prefix, "Library", "lib", "geos_c.dll")]}

...

setup(...
options = {'build_exe': build_exe_options},
...)

如果这不起作用,请尝试使用

build_exe_options = {'include_files': [(os.path.join(sys.prefix, "Library", "lib", "geos_c.dll"), os.path.join("lib", "geos_c.dll"))]}

如果这也不起作用,请尝试使用

build_exe_options = {'include_files': [(os.path.join(sys.prefix, "Library", "lib", "geos_c.dll"), os.path.join("Library", "lib", "geos_c.dll"))]}

关于python - cx_freeze exe 文件在 anaconda 提示符下有效,但在 Windows cmd 命令提示符下无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com