簡體   English   中英

如何使用setuptools和setup.py從包中排除單個文件

[英]How to exclude a single file from package with setuptools and setup.py

我正在研究blowdrycss 存儲庫在這里

我希望從pypi的最終包中排除blowdrycss_settings.py的設置文件。 目的是動態構建一個自定義設置文件,該文件將放置在用戶virtualenv / project文件夾中。

setup.py ,我有以下內容:

packages=find_packages(exclude=['blowdrycss_settings.py', ]),

我也嘗試過exclude_package_data

exclude_package_data={
    '': ['blowdrycss_settings.py'],
    '': ['blowdrycss/blowdrycss_settings.py'],
    'blowdrycss': ['blowdrycss_settings.py'],
},

然后我運行python setup.py sdist bdist

但是,當我查看build文件夾時,我仍然看到blowdrycss_settings.py

- build 
    - lib
        - blowdrycss_settings.py

看起來排除文件應該很簡單。

如何從分布式軟件包中排除blowdrycss_settings.py

這是我的解決方案。

blowdrycss下面,我創建了一個名為settings的新模塊,因此目錄結構現在看起來像這樣:

blowdrycss
    blowdrycss
        settings
            blowdrycss_settings.py

基於此引用 ,在setup.py我有以下內容:

packages=find_packages(exclude=['*.settings', ]),   

要構建分發:

  1. 刪除builddist.egg-info文件夾。
  2. 運行python setup.py sdist bdist

回想起來,我無法做我最初嘗試的事情是好的。 新結構感覺更清潔,更模塊化。

想象一下,你有一個項目

root
├── setup.py
└── spam
    ├── __init__.py
    ├── bacon.py
    └── eggs.py

並且您想要從包裝中排除spam/eggs.py

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


excluded = ['spam/eggs.py']


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(file, pat=pattern) for pattern in excluded)
        ]


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

excluded列表中的Globs和多個條目也會起作用,因為它被fnmatch ,因此您可以聲明

excluded = [
    'modules_in_directory/*.py',
    'modules_in_subtree/**/*.py',
    'path/to/other/module.py'
]

等等

這個配方基於setup.py問題的另一個答案從bdist中排除了一些python文件 區別在於此配方不包括基於文件globs的模塊,而另一個不包括基於qualnames的模塊,例如

excluded = ['spam.*', '*.settings']

將排除spam包的所有子模塊以及每個包和子包等中的所有模塊命名settings

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM