gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:12 24 4
gpt4 key购买 nike

我正在尝试创建一个 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

我在 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

附言。如果你试图向人们隐藏消息来源——你就走错了路。 *.pyc 文件可以被反编译。有一个 disassembler在标准库中有很多decompilers and uncompilers在那里。

关于python - sdist/bdist_wheel 在 Linux 中不包括 pyc 但在 Windows 中包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com