我正在使用 Cython--embed
模式来生成.exe。我正在评估分发嵌入 Cython 编译的代码并使其在任何机器上运行所需的最少文件集 https://stackoverflow.com/questions/62390978/minimal-set-of-files-required-to-distribute-an-embed-cython-compiled-code-and-ma/62392087#62392087。为此,我仅从 Python Windows 复制最少数量的文件嵌入式封装 https://www.python.org/downloads/windows/.
为了检查这一点,我需要确保我正在测试的当前进程doesn't事实上,使用我的系统默认安装的Python,即C:\Python38。
为此,我打开一个新的cmd.exe
and do set PATH=
这会暂时删除 PATH 中的所有内容。然后我可以测试任何自编译的app.exe
并确保它不会重复使用C:\Python38
的文件在幕后。
除了模块之外,它可以工作。即使做了之后set PATH=
,我的代码app.py
import json
print(json.dumps({"a":"b"}))
当 Cython---embed
-编译成.exe可以工作,但它仍然使用C:\Python38\Lib\json\__init__.py
!我确信这一点,因为如果我暂时删除这个文件,我的 .exe 现在会失败,因为它找不到json
module.
如何彻底删除任何链接C:\Python38
调试Python程序时哪些不应该使用这些文件?
为什么不是set PATH=
足够的?它为模块使用了哪些其他环境变量?我检查了所有系统变量,我想我没有找到任何与 Python 相关的变量。
Python 有一个相当复杂的启发式方法来查找它的“安装”(例如,参见这个SO问题 https://stackoverflow.com/q/56857449/5769463或这个描述 https://github.com/python/cpython/blob/3.7/Modules/getpath.c#L14),所以它可能找不到您提供的安装,而是找到“默认”安装。
可能最简单的方法是设置环境变量PYTHONPATH
指向启动嵌入式解释器之前所需的安装。
通过检查sys.path
可以检查是否找到正确的安装。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)