如何从Python的whl文件中排除*.pyc和__pycache__文件?

15

如何在Python Wheel分发包中正确地排除文件?

编辑 MANIFEST.in 文件无效,我找不到关于这个细节的信息。


1
你有示例源代码可用吗?能否提供一个仓库以便能够复现它会很不错。 - SomeGuyOnAComputer
4个回答

1

我猜你是在问如何在使用 bdist/sdist 打包成 wheel 文件时排除 __pycache__ 目录和 *.pyc 文件。如果是这样,以下清单命令对我有效。

global-exclude */__pycache__/*
global-exclude *.pyc

0

find_packages 函数来自 setuptools,它可以实现这个功能。此外,你还可以指定要排除的目录,例如:

packages=find_packages(exclude=['docs', 'tests']),

但是编译后的文件(pyc 文件和 __pycache__ 目录)应该自动排除。


2
find_packages(exclude=[]) 只在包级别过滤。 - Pablo Arias

0

我从未遇到过这个问题。

以下是我的setup.py的摘录:

   name='aenum',
   version='2.0.2',
   url='https://bitbucket.org/stoneleaf/aenum',
   packages=['aenum'],
   package_data={
       'aenum' : [
           'LICENSE',
           'README',
           'doc/aenum.rst',
           'doc/aenum.pdf',
           ]
       },
   include_package_data=True,
   license='BSD License',
   description="Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants",
   long_description=long_desc,
   provides=['aenum'],
   author='Ethan Furman',
   author_email='...',
   classifiers=[
        ...
        ],

还有我的 MANIFEST.in 文件:

exclude aenum/*
include setup.py
include README
include aenum/__init__.py
include aenum/test.py
include aenum/test_v3.py
include aenum/LICENSE
include aenum/CHANGES
include aenum/README
include aenum/doc/aenum.pdf
include aenum/doc/aenum.rst

我会说 exclude aenum/* 对我来说是起作用的,所以可能一个 exclude <package_name>/__pycache__ 对你也会有用。


-2

为什么你要这样做?当项目第一次在目标机器上运行时,__pycache__目录将自动生成。它只是Python的优化字节码表示。

但无论如何,您可以编写一个脚本来解压.wheel文件并进行修改,然后重新打包wheel文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接