sdist/bdist_wheel 不包括 Linux 中的 pyc 但包括在 Windows 中

sdist/bdist_wheel not including pyc in Linux but is included in Windows

我正在尝试创建一个 Python 分发版,我必须在其中包含源代码和编译后的二进制文件。 (是的,我阅读了参数 against/for 添加 .pyc,但我的用例需要添加 .pyc)。 运行我在 Windows 中的步骤,源代码和编译后的二进制文件都添加到输出文件中(我同时使用了 sdistbdist_wheel)。

假设我有以下结构:

root
+--folderA
   +--alpha
   +--beta
   +--__init__.py
+--folderB

folderA 包含源代码,而 folderB 包含其子目录中的其他文件。

完成的步骤:

  1. 模块使用compileall
  2. 编译
  3. alpha 中的来源已删除。保留 beta 中的来源。
  4. 运行 python setup.py sdist|bdist_wheel

我在setup.py中使用了find_packages()来检测模块。未检测到 alpha 中的模块,但找到了 beta 中的模块。

在 Windows 中的结果 .tgz.whl 个文件中,所有需要的文件都在那里。一切都很好。

然而,当在Linux(具体为Ubuntu)中执行相同的过程时,仅添加了beta中的模块和folderB中的一些模块但不是其他不同类型的文件和模块alphasdist 将仅提供来源,而 bdistbdist_wheel 将仅提供 .pyc。我知道 sdist 用于分发源文件,而 bdist 用于二进制文件。

我的问题是 为什么 Windows 中的行为不同,是否有可能在 Linux 中产生相同的输出(来源和 .pyc 以及其他文件)?

我正在使用 Python 2.7.

要在 sdist 中包含文件,请将它们添加到 MANIFEST.in:

global-include *.py *.pyc

在 Linux 上将 *.pyc 加入 wheels 对我来说没有任何特殊配置,我只是这样做

python setup.py build
python -m compileall build
python setup.py sdist
python setup.py bdist_wheel

PS。如果你试图向人们隐藏消息来源——你就走错了路。 *.pyc个文件可以反编译。那里有一个disassembler in standard library and there are many decompilers and uncompilers