我正在尝试创建一个Python发行版,我必须包含源代码和已编译的二进制文件。 (是的,我读了反对/添加.pyc
的论据,但我的用例需要添加.pyc
。在Windows中运行我的步骤,源文件和已编译的二进制文件都添加到输出文件中(我同时使用sdist
和bdist_wheel
)。
说我有以下结构:
root
+--folderA
+--alpha
+--beta
+--__init__.py
+--folderB
folderA
包含源代码,而folderB
包含其子目录中的其他文件。
已完成的步骤:
compileall
alpha
中的来源已被删除。保留beta
中的来源。python setup.py sdist|bdist_wheel
我在setup.py中使用find_packages()
来检测模块。 alpha
中的模块未被检测到beta
中的模块。
在Windows中的结果.tgz
和.whl
文件中,所有需要的文件都在那里。一切都很好。
但是,当在Linux中完成相同的过程(特定于Ubuntu)时,只添加beta
中的模块,folderB
中的某些模块,但不是其他类型的文件和模块alpha
。 sdist
只会提供来源,而bdist
和bdist_wheel
仅会提供.pyc
。我知道sdist
用于分发源文件,bdist
用于二进制文件。
我的问题是为什么Windows 中的行为不同,是否可以在Linux中生成相同的输出(源和.pyc
以及其他文件)?
我正在使用Python 2.7。
答案 0 :(得分:1)
要在sdist中包含文件,请将其添加到MANIFEST.in:
global-include *.py *.pyc
将*.pyc
包含在轮子中,无需任何特殊配置即可在Linux上运行,我只需
python setup.py build
python -m compileall build
python setup.py sdist
python setup.py bdist_wheel
PS。如果你试图隐藏人们的来源 - 你就错了。 *.pyc
个文件可以反编译。标准库中有disassembler,其中有许多decompilers and uncompilers。