1

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

假设我有以下结构:

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

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

完成的步骤:

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

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

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

但是,在 Linux(具体是 Ubuntu)中执行相同的过程时,只beta添加了 中的模块和一些模块,folderB没有添加其他不同类型的文件和模块alpha. sdist只会给出 source whilebdist并且bdist_wheel只会给出.pycs。我知道这sdist是用于分发源文件,而bdist用于二进制文件。

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

我正在使用 Python 2.7。

4

1 回答 1

2

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

global-include *.py *.pyc

在没有任何特殊配置的情况下,在 Linux 上将轮子包括在内*.pyc对我有用,我只是这样做

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

PS。如果你试图向人们隐藏消息来源——你就走错了路。*.pyc文件可以反编译。标准库中有一个反汇编器,那里有许多反编译器和反编译器

于 2018-01-22T12:37:59.623 回答