Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为win10编译多模块cythonized项目?_Python_Python 3.x_Windows_Compilation_Cython - Fatal编程技术网

Python 如何为win10编译多模块cythonized项目?

Python 如何为win10编译多模块cythonized项目?,python,python-3.x,windows,compilation,cython,Python,Python 3.x,Windows,Compilation,Cython,我正在从事一个python3.7项目,该项目涉及多个模块,并从分布式软件包(pyside2,scipy,…)导入。该项目是在ubuntu下成功开发、实现和编译的。我现在的任务是为windows 10创建一个.exe文件 我试图在windows 10上应用与ubuntu相同的cythonize和compile过程: 除了main.py之外,我对所有模块进行了cythonization,包括: python cythonizer.py build_ext——就地 cythonizer.py包含: f

我正在从事一个python3.7项目,该项目涉及多个模块,并从分布式软件包(pyside2,scipy,…)导入。该项目是在ubuntu下成功开发、实现和编译的。我现在的任务是为windows 10创建一个.exe文件

我试图在windows 10上应用与ubuntu相同的cythonize和compile过程:

除了main.py之外,我对所有模块进行了cythonization,包括:

python cythonizer.py build_ext——就地

cythonizer.py包含:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [
        Extension("datatools",  ["datatools.py"]),
        Extension("logger_conf",  ["logger_conf.py"]),
        Extension("serialization",  ["serialization.py"]),
        Extension("UimainWindow",  ["UimainWindow.py"]),
        Extension("UiprojectsFrame_newProject",  ["UiprojectsFrame_newProject.py"]),
        Extension("UiprojectsFrame_projectInfo",  ["UiprojectsFrame_projectInfo.py"]),
        Extension("UiprojectsFrame",  ["UiprojectsFrame.py"]),
        Extension("units_and_formats",  ["units_and_formats.py"]),
        ]

for e in ext_modules:
    e.cython_directives = {'language_level': "3"}

setup(
    name = 'aircraft2020-v0.10',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
    )
然后,我使用嵌入选项对我的主模块进行了cythonization:

cython main.py--嵌入-3

为此,我从.py文件生成了.c文件。 下一步是编译这些文件。在ubuntu上,我成功地使用了gcc,在windows 10上,计算机没有gcc,但有visual studio,因此我尝试:

cl.exe/nologo/Ox/MD/W3/GS-/DNDEBUG-I{PythonPath}\include-I{PythonPath}\PC{all_my.c_files_here}/link/OUT:“myProgram.exe”/SUBSYSTEM:CONSOLE/MACHINE:X86/LIBPATH:{PythonPath}\libs/LIBPATH:{PythonPath}\PCbuild

{PythonPath}和{all_my_u.c_files_here}实际上是很长的路径和列表,因此为了可读性,我没有将其完全复制到这里

这将编译一个.exe。但试图执行它会立即崩溃。在命令提示符下执行时,它会在出现错误时停止,该错误指示它找不到为导入而调用的第一个模块:

Traceback (most recent call last):
  File "main.py", line 11, in init main
ModuleNotFoundError: No module named 'serialization'
如果我将.py源文件移动到文件夹中,它就会工作!但很明显,我不希望源文件出现在realeased文件中。我猜在编译的可执行文件中导入模块的方式有问题。有人知道我错过了什么吗

谢谢你的帮助

编辑: 多亏了ead的评论,我才明白自己的困惑所在。通常在linux下,我不理解为什么我没有得到.so文件,并且认为cl会把所有东西都放在.exe中

事实上,在windows下.so文件是.pyd文件。cl命令应仅用于编译main.c文件,而不用于编译其他.c文件


然后,只需将.pyd文件与.exe文件放在同一文件夹中,即可使其正常工作。

我认为对正在发生的事情存在误解。cythonizer.py创建扩展名(pyd文件),并在调用“import xxxx”时导入这些扩展名。如果您的exe没有找到pyd(py)文件,它将失败(它不知道该功能实际上是由链接器打包到exe中的)。这是否回答了您的问题?谢谢你,你的评论让我意识到我哪里弄糊涂了,我将用解决方案编辑OP,谢谢。我认为这是对正在发生的事情的误解。cythonizer.py创建扩展名(pyd文件),并在调用“import xxxx”时导入这些扩展名。如果您的exe没有找到pyd(py)文件,它将失败(它不知道该功能实际上是由链接器打包到exe中的)。这是否回答了您的问题?谢谢你,你的评论让我意识到我哪里弄糊涂了,我会用解决方案编辑OP,谢谢