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

时间:2018-01-22 08:47:16

标签: python linux setuptools python-wheel sdist

我正在尝试创建一个Python发行版,我必须包含源代码和已编译的二进制文件。 (是的,我读了反对/添加.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
  5. 我在setup.py中使用find_packages()来检测模块。 alpha中的模块未被检测到beta中的模块。

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

    但是,当在Linux中完成相同的过程(特定于Ubuntu)时,只添加beta中的模块,folderB中的某些模块,但不是其他类型的文件和模块alpha sdist只会提供来源,而bdistbdist_wheel仅会提供.pyc。我知道sdist用于分发源文件,bdist用于二进制文件。

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

    我正在使用Python 2.7。

1 个答案:

答案 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