将第三方库添加到用 cython 编译的 pyd 文件并用 pyinstaller 在 exe 上打包
Add third party libs to pyd file compiled with cython and packaging on exe with 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'])
在main.py中导入如下:
from src.lib.module import myclass
当我 运行 我的应用程序使用命令“python main.py”时它可以工作但是当 运行 el .exe 使用 pyinstaller 生成时它抛出异常 ImportError No moduled命名模块。
我尝试在 pyinstaller 的 spec 文件上的隐藏导入上导入 module.pyd,然后出现错误,No module import requests, request is used on module.pyd.
如果我已经安装了 requests 那么为什么 cython 或 pyinstaller 没有导入模块或者真正的问题是什么?
在你创建lib的pyInit文件中,你可以将项目的库和库目录设置为link。例如
extensions = [
Extension(name="xxxx",sources=["xxx.pyx"],
libraries=["myclass"],
library_dirs=["/src/libdirectory"],
language="c++",),
]
这告诉 cython linker 去寻找图书馆。需要注意的一件事,对于 gnu 编译器,如果您希望 link 用户看到 "myclass"
,请确保将您的库命名为 "libmyclass.so"
好吧,有几件事没有看到太多代码...
您真的希望扩展名为 "src.libs.myGridLayout" 吗?意思是,你想做
import src.libs.myGridLayout
在您的 python 文件中?如果这是您的设计,那么这就是您所做的。该名称是实际扩展的名称。
library_dir 是查找 "external" 库的地方。 (如 Windows.lib)Cython 将为您编写的代码 link 项目的适当库,但对于其他任何内容,这就是您放在 "libraries" 目录中的内容。
顺便说一句,什么是 "namelibrary.lib"?如果它是你想在你的项目中使用的库,那么你只需添加找到该库的路径,然后将 "namelibrary" 添加到库中。
只要看看你为 cython 编写这个扩展的方式,我强烈建议你慢一点,阅读/学习更多关于如何设置项目以及如何使用这些扩展。祝你好运! :)
我正在使用 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'])
在main.py中导入如下:
from src.lib.module import myclass
当我 运行 我的应用程序使用命令“python main.py”时它可以工作但是当 运行 el .exe 使用 pyinstaller 生成时它抛出异常 ImportError No moduled命名模块。
我尝试在 pyinstaller 的 spec 文件上的隐藏导入上导入 module.pyd,然后出现错误,No module import requests, request is used on module.pyd.
如果我已经安装了 requests 那么为什么 cython 或 pyinstaller 没有导入模块或者真正的问题是什么?
在你创建lib的pyInit文件中,你可以将项目的库和库目录设置为link。例如
extensions = [
Extension(name="xxxx",sources=["xxx.pyx"],
libraries=["myclass"],
library_dirs=["/src/libdirectory"],
language="c++",),
]
这告诉 cython linker 去寻找图书馆。需要注意的一件事,对于 gnu 编译器,如果您希望 link 用户看到 "myclass"
,请确保将您的库命名为 "libmyclass.so"好吧,有几件事没有看到太多代码...
您真的希望扩展名为 "src.libs.myGridLayout" 吗?意思是,你想做
import src.libs.myGridLayout
在您的 python 文件中?如果这是您的设计,那么这就是您所做的。该名称是实际扩展的名称。
library_dir 是查找 "external" 库的地方。 (如 Windows.lib)Cython 将为您编写的代码 link 项目的适当库,但对于其他任何内容,这就是您放在 "libraries" 目录中的内容。
顺便说一句,什么是 "namelibrary.lib"?如果它是你想在你的项目中使用的库,那么你只需添加找到该库的路径,然后将 "namelibrary" 添加到库中。
只要看看你为 cython 编写这个扩展的方式,我强烈建议你慢一点,阅读/学习更多关于如何设置项目以及如何使用这些扩展。祝你好运! :)