Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 Cython在生成的代码中包含其他导入_Python_Cython - Fatal编程技术网

Python Cython在生成的代码中包含其他导入

Python Cython在生成的代码中包含其他导入,python,cython,Python,Cython,经过几个小时的努力,我终于成功地将Python代码转换为C,然后再转换为exe文件,以发现导入不起作用。我想知道是否有人知道如何让它包含所有东西?我所有的搜索都没有结果 我不确定这是否会有所不同,但我就是这样做的: --inplace选项不适用于setup.py(因为它会生成一个无法编译的C文件),所以我使用cython--embed-o main.C main.py通过命令行来执行 我将libs和include文件夹从Python复制到另一个文件夹中,并从那里编译C文件。以下是我尝试运行脚本时

经过几个小时的努力,我终于成功地将Python代码转换为C,然后再转换为exe文件,以发现导入不起作用。我想知道是否有人知道如何让它包含所有东西?我所有的搜索都没有结果

我不确定这是否会有所不同,但我就是这样做的:

--inplace
选项不适用于
setup.py
(因为它会生成一个无法编译的C文件),所以我使用
cython--embed-o main.C main.py
通过命令行来执行

我将
libs
include
文件夹从Python复制到另一个文件夹中,并从那里编译C文件。以下是我尝试运行脚本时出现的错误:

Traceback (most recent call last):
  File "start_tracking.py", line 5, in init start_tracking (start_tracking.c:1133)
ImportError: No module named core.constants

我如何在生成的C代码中包含所有导入(而不只是将所有内容复制到一个文件中)?

{您可能希望在这里使用带轮子的cx\U freeze,这似乎完成了许多或相当多的任务}

好吧,这并不是完全回答你的问题,但它应该是有效的(尽管不是你所采取的方法)。为此,我将为您提供一个巨大的下载链接,您只需输入一个(v3.5).py文件即可。在您的例子中,一个.py文件将通过一个import语句调用编译好的Cython PYD(如果您实际上包括您自己的Cython模块),然后调用任何其他代码。我认为拥有一个包含所有导入的完整exe会很好,但是很多包需要DLL或PYD文件才能运行,所以您的构建将始终至少有一个exe、Python解释器及其所有依赖项(例如Python3x.DLL)。您可以尝试:memimporter和zipextimporter,它们能够从内存/zip档案中加载.pyd文件,而无需将它们解压缩到文件中,但这只允许您将所有扩展模块放在一个zip文件中进行分发(这可能会降低所需的pyd&DLL加载速度,但我还没有看到有关这些方法的基准测试)


如果你碰巧得到了上述工作在1个zip包的扩展模块,请给我你的代码更改!!!这已经包括NumPy、SciPy、Pandas,并且是针对Intel MKL构建的。使用参考链接:理想情况下,我会在.py文件上使用一些加密算法来扩展该链接的方法,该算法将在运行时解密。直接下载在这里,但您应该看到我的另一个链接以澄清用法:我应该注意,您编译的PYD及其相关DLL也应该位于使用Visual Studio 2015 x64 for Windows builds编译的子文件夹中的
扩展_modules
中。该链接无法在Linux上正常运行。

我也遇到了同样的问题。我随后将所有模块都包含在我的根pyx文件中。但是,如果该模块导入了另一个模块,则会遇到导入错误

经过一些研究之后,我习惯于转换成一个python文件,比如main.py。然后

cython——嵌入-o main.c main.py

gcc main.c-I/usr/include/python3.5m-L/usr/lib/x86_64-linux-gnu/-o main-lpython3.5m-lpthread-lm-lutil-ldl


viola,我有一个c语言的可执行文件,它是通过python转换的

我从来没有想出一个方法来实现这一点-您可能必须手动将所有依赖项从站点包目录复制到子文件夹中,就像它们位于站点包中一样,例如exe所在的子文件夹下面。我相信embed只是嵌入了Python解释器。为了澄清您的错误,您至少需要在exe路径下完整地安装
core
包。我发现了它的另一个巨大问题,我假设它能够在实际导入中写入,但它甚至作为exe文件在查找Python文件夹。我花了几个小时写了一个脚本,将所有内容合并到一个页面后才发现,哈哈。谢谢,它看起来很有希望,但只闪烁了不到一秒钟(我将所需文件移到了扩展文件夹)。我用Python2构建了这个脚本,但试图使它与Python3兼容,所以我不确定它是不是兼容。无论如何,干杯:p尝试打开一个cmd提示符,这样你就可以看到任何丢失的包。如果我找到了如何传递文件(似乎无法搜索正确的问题),我会这样做的。愚蠢的问题哈哈,但是我如何通过命令行传入python文件呢?应该是:EmbeddePythonScriptName functionname parameter1 parameter2等。函数上没有.py。您可能需要在Cython模块周围编写一个小包装器。@Peter您也不能使用exe,您需要将其编译为PYD,然后编写一个Py文件来调用它,如上所述<代码>从MyLibrary导入我的函数然后对程序执行任何操作。它不会嵌入我的本地导入。有解决办法吗