我正在尝试创建一个 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。
最佳答案
要将文件包含在 sdist 中,请将它们添加到 MANIFEST.in :
global-include *.py *.pyc
将 *.pyc
包含到wheels中对我来说在Linux上不需要任何特殊配置,我只是这样做
python setup.py build
python -m compileall build
python setup.py sdist
python setup.py bdist_wheel
PS。如果你试图向人们隐藏消息来源,那么你就走错了路。 *.pyc
文件可以反编译。有一个disassembler在标准库中有很多decompilers and uncompilers就在那里。
关于python - sdist/bdist_wheel 在 Linux 中不包含 pyc,但在 Windows 中包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377637/