python - sdist/bdist_wheel 在 Linux 中不包含 pyc,但在 Windows 中包含

标签 python linux setuptools python-wheel sdist

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

假设我有以下结构:

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

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

完成的步骤:

  1. 模块使用 compileall 进行编译
  2. alpha 中的来源已被删除。保留 beta 中的源代码。
  3. 运行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

*.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/

相关文章:

python - keras:准确度为 98%,但神经网络始终预测相同。可能是什么原因?

python - 使用 TSNE 在 Python 中可视化集群

linux - 扩展特定限制时从 unix 服务器中删除文件

python - setuptools 可以与 python 3.2.x 一起使用吗

python - 强制setuptools使用dependency_links来安装mysqlclient

python - 如何捕获 python 警告错误和 'bury' 呢?

python - 尝试将非有序查询集与多个有序值进行比较 django

c++ - 在 C++ 中监听后如何从同一端口发送数据?

linux - 使用一个重复函数进行增量?

python - 除了 PyPI 的 tarball 之外,我还应该准备鸡蛋和 zip 吗?