我试图通过python : main.py为main.py创建一个可执行文件,该脚本导入模块datatools.py
我创建了cythonizer.py (下面的代码),使用cython将.py文件转换为.c和.pyd文件。
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Compiler import Options
ext_modules = [
Extension("datatools", ["datatools.py"]),
Extension("main", ["main.py"]),
]
for e in ext_modules:
e.cython_directives = {'language_level': "3"}
Options.docstings = False
Options.embed = "main"
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
然后,在具有VisualStudio2019社区的win10计算机上,我在"x64本机工具命令提示符for VS2019“中运行以下命令:
python cythonizer.py build_ext --inplace
cl.exe /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\Users\mme\AppData\Local\Programs\Python\Python36\include -IC:\Users\mme\AppData\Local\Programs\Python\Python36\PC datatools.c main.c /link /OUT:"myApp.exe" /SUBSYSTEM:CONSOLE /MACHINE:X64 /LIBPATH:C:\Users\mpa\AppData\Local\Programs\Python\Python36\libs /LIBPATH:C:\Users\mpa\AppData\Local\Programs\Python\Python36\PCbuild
这个过程过去是有效的,当我开发这个东西时,我能够产生一个工作的.exe,datatools.py和main.py变得更重了。Notabilly datatools.py现在包含大型字典和列表。
现在,当我运行第一个命令时,我得到了错误(法语操作系统对不起):
LINK : l'éditeur de liens 32 bits (C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\HostX86\x64\link.exe) manque d'espace de tas et va redémarrer l'édition des liens avec un éditeur de liens 64 bits
LINK : redémarrage de l'édition des liens avec l'éditeur de liens 64 bits 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\HostX64\x64\link.exe'
LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'C:\Users\mme\Documents\aircraft2020-v0.26\datatools.cp36-win_amd64.pyd'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.25.28610\\bin\\HostX86\\x64\\link.exe' failed with exit status 1104
换言之:
失败。
我猜想它曾经工作过,因为32位链接器曾经足够了。既然datatool.py太重,32位链接器就会失败,那么64位链接器就会启动,但是这个链接器发现文件被锁定了,因为32位链接器打开了它,所以它无法编辑它。
这个诊断是否正确,如果是的话,我是否可以在我的cythonizer.py文件中立即使用64位链接器呢?
发布于 2021-03-15 13:59:16
我确认我的诊断是正确的,将文件分割成多个更轻的文件是可以避免问题的。
然后,DavidW的建议(上面)也是正确的,在cythoniser脚本中添加了下面一行解决了这个问题。
from distutils import _msvccompiler
_msvccompiler.PLAT_TO_VCVARS['win-amd64'] = 'amd64'
https://stackoverflow.com/questions/66598686
复制相似问题