gpt4 book ai didi

python - setup.py 从 bdist 中排除一些 python 文件

转载 作者:太空狗 更新时间:2023-10-29 20:30:55 26 4
gpt4 key购买 nike

我有一个具有这种架构的 django 项目:

  • setup.py
  • 项目/
    • __初始化__.py
    • 管理.py
    • 设置/
      • __初始化__.py
      • 基础.py
      • 开发文件
    • 网址/
      • __初始化__.py
      • 基础.py
      • 开发文件

我想在没有“dev.py”文件的情况下将其部署在 .egg 中。我尝试了不同的方法:首先,使用

find_packages(exclude=['*.dev','dev'])

,然后是一个 MANIFEST.in,其中包含:

global-exclude dev.py

当我执行 sdist 时,第二种解决方案似乎有效 - 安装时出现此警告:

warning: no previously-included files matching 'dev.py' found anywhere in distribution 

,但不适用于 bdist-egg。

这是我的 setup.py 的一部分:

from setuptools import setup, find_packages
project import VERSION


packages = [
'project',
'project.settings',
'project.urls',
]

setup(name='project',
version=VERSION,
package_dir = {'project' : 'project'},
description = 'My Project',
author = 'Simon Urli',
author_email = '',
url = '',
packages = packages, #find_packages('project',exclude=['*.dev', 'dev']),
)

请注意,我使用的是 python 2.6.6,也许这很重要。知道如何正确创建不包含开发文件的 egg 吗?

最佳答案

我最近遇到了同样的问题(虽然我不得不构建一个轮子而不是一个鸡蛋),该解决方案对于 bdist_eggbdist_wheel 都是一样的。您必须覆盖 build_py 中的方法 find_package_modules:

import fnmatch
from setuptools import find_packages, setup
from setuptools.command.build_py import build_py as build_py_orig


exclude = ['*.dev']


class build_py(build_py_orig):

def find_package_modules(self, package, package_dir):
modules = super().find_package_modules(package, package_dir)
return [(pkg, mod, file, ) for (pkg, mod, file, ) in modules
if not any(fnmatch.fnmatchcase(pkg + '.' + mod, pat=pattern)
for pattern in exclude)]


setup(
packages=find_packages(),
cmdclass={'build_py': build_py},
)

在此示例中,所有包中名为 dev 的模块将被排除在构建之外。

如您所见,无需在 find_packages() 中使用排除项,因为您仍然需要包含所有包,而是过滤在每个包中找到的模块文件。 build_py 类非常通用,如果您需要重用它,可以在单独的库中进行重构;唯一特定于项目的内容是排除模式列表。

关于python - setup.py 从 bdist 中排除一些 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5974982/

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