首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Cython和VisualStudio2019尝试从python文件构建可执行文件时出错(32/64位link.exe)

使用Cython和VisualStudio2019尝试从python文件构建可执行文件时出错(32/64位link.exe)
EN

Stack Overflow用户
提问于 2021-03-12 11:02:08
回答 1查看 159关注 0票数 0

我试图通过python : main.py为main.py创建一个可执行文件,该脚本导入模块datatools.py

我创建了cythonizer.py (下面的代码),使用cython将.py文件转换为.c和.pyd文件。

代码语言:javascript
运行
复制
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“中运行以下命令:

代码语言:javascript
运行
复制
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现在包含大型字典和列表。

现在,当我运行第一个命令时,我得到了错误(法语操作系统对不起):

代码语言:javascript
运行
复制
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

换言之:

  • link.exe在32位中失败,因为它在链接编辑过程中缺少空间,并在64位中启动64位版本的
  • ,它使用致命错误LNK1104 :无法打开.py文件

失败。

我猜想它曾经工作过,因为32位链接器曾经足够了。既然datatool.py太重,32位链接器就会失败,那么64位链接器就会启动,但是这个链接器发现文件被锁定了,因为32位链接器打开了它,所以它无法编辑它。

这个诊断是否正确,如果是的话,我是否可以在我的cythonizer.py文件中立即使用64位链接器呢?

EN

Stack Overflow用户

发布于 2021-03-15 13:59:16

我确认我的诊断是正确的,将文件分割成多个更轻的文件是可以避免问题的。

然后,DavidW的建议(上面)也是正确的,在cythoniser脚本中添加了下面一行解决了这个问题。

代码语言:javascript
运行
复制
from distutils import _msvccompiler
_msvccompiler.PLAT_TO_VCVARS['win-amd64'] = 'amd64'
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66598686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档