我有下一个案例:
我得到了什么:
setup.py文件示例:
from distutils.core import setup
from Cython.Build import cythonize
extensions = ["mycore.pyx"]
setup(
name='mycore',
version='1.0',
ext_modules=cythonize(extensions),
#packages=['Padding'], - once tried => "error: package directory 'Padding' does not exist"
)
任何想法或建议都会很棒!
更新
还尝试使用setup_tools
变体,也没有成功:
from Cython.Build import cythonize
from setuptools import setup, find_packages, Extension, Command
setup(name='mycore',
packages = find_packages(),
version=1.0,
include_package_data=True,
platforms=['all'],
ext_modules=[Extension("mycore", ['mycore.c'])],
#extra_require = {"Padding"} - also nothing
)
答案 0 :(得分:3)
要求 PyInstaller 在构建过程中包含所需的模块。似乎最简单的方法是使用--hidden-import
参数:
--hidden-import=modulename
命名导入的 Python 模块,该模块在代码中不可见。该模块将被包含,就像它在import
语句中命名一样。此选项可以多次出现。
因此,请在构建应用程序时添加以下参数:
--hidden-import=Padding
修改强>
尝试在单独的*.py
文件中导入所有必需的模块(触发错误),而不是导入*.pyx
\ *.pyd
文件。这是一个丑陋的解决方法,但可能会解决这个问题。
考虑在此方案中使用__init__.py
文件。
答案 1 :(得分:1)
这是我最近创建的setup.py(https://github.com/robintiwari/django-me/blob/master/setup.py)文件,它有效并且有类似的问题,我同意@Sanju使用setuptools.find_packages()。它为我解决了这个问题。
答案 2 :(得分:1)
我猜测问题是PyInstaller没有看到由cython代码导入的软件包,所以它不包含在bundle应用程序中。
必须有办法告诉PyInstaller包含Padding包。
我无法告诉你如何 - 从未使用它,但这就是你用py2exe和py2app处理它的方法。