【问题标题】:sdist/bdist_wheel not including pyc in Linux but is included in Windowssdist/bdist_wheel 在 Linux 中不包括 pyc 但在 Windows 中包括
【发布时间】:2018-06-30 20:25:57
【问题描述】:

我正在尝试创建一个 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 中的一些模块,但 没有其他不同类型的文件和模块 @ 987654339@sdist 将仅提供源,而 bdistbdist_wheel 将仅提供 .pycs。我知道sdist 用于分发源文件,而bdist 用于二进制文件。

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

我正在使用 Python 2.7。

【问题讨论】:

    标签: python linux setuptools python-wheel sdist


    【解决方案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

    【讨论】:

    • 谢谢,我试试。至于隐藏来源,我们确实有自己的理由,但我们认为我们不会长期这样做:)。
    • 抱歉是四个命令,应该是四种不同的方式来生成包?
    • 好吧,我好像搞定了这个:buildcompilesdist|bdist_wheel应该依次执行。
    • 是的,没错。 PS。还有更多生成包的方法——sdist 用于源分发,bdist_eggbdist_wheel 用于“eggs”和“wheels”,bdist_debbdist_rpm...
    • 我将如何专门排除所有 *.py 文件并仅分发 *.pyc 文件? bdist_wheel 是否考虑了 MANIFEST.in,还是仅考虑 sdist?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多