将第三方库添加到使用cython编译的pyd文件,并使用pyinstaller在exe上打包

时间:2016-10-30 00:15:36

标签: python compilation cython pyinstaller

我正在使用cython从py编译一个文件到pyd,我按如下方式创建我的setup.py:

from setuptools import setup from Cython.Build import cythonize

setup(
    name = "My App",
    ext_modules = cythonize(['src\\lib\\module.py'])

setup( name = "My App", ext_modules = cythonize(['src\\lib\\module.py'])

它在main.py中导入如下:

当我使用命令“python main.py”运行我的应用程序时,它可以工作,但是当使用pyinstaller生成el .exe时,它会抛出异常ImportError No moduled named module。

我尝试在pyinstaller的spec文件上的hidden-import中导入module.pyd,然后我收到错误,没有模块导入请求,请求在module.pyd上使用。

如果我已经安装了请求,那么为什么cython或pyinstaller没有导入模块或者什么是真正的问题?

2 个答案:

答案 0 :(得分:0)

在用于创建lib的pyInit文件中,您可以设置要链接到的项目的库和库目录。例如

extensions = [ Extension(name="xxxx",sources=["xxx.pyx"], libraries=["myclass"], library_dirs=["/src/libdirectory"], language="c++",), ]

这告诉cython链接器查找库。有一点需要注意,对于gnu编译器,如果希望链接器看到“myclass”,请确保将库命名为“libmyclass.so”

答案 1 :(得分:0)

好的,有些事情没有看到太多代码......

你真的希望扩展名是" src.libs.myGridLayout" ?意思是,你想做什么

import src.libs.myGridLayout
你的python文件中的

?如果这是你的设计,那就是你的设计。名称是实际扩展名。

library_dir是寻找"外部"的地方。库。 (比如Windows.lib)Cython会为你编写的代码链接你项目的正确库,但对于其他任何东西,这就是你放在"库" 。目录

BTW," namelibrary.lib" ?如果它是你想在yoru项目中使用的库,那么你只需添加找到该库的路径,然后添加" namelibrary"到图书馆。

仅仅看一下你为cython编写这个扩展的方式,我强烈建议你慢一点,阅读/学习更多关于如何设置项目,以及如何使用这些扩展。祝好运! :)