Python setup.py:如何获取findPackages()来识别子目录中的包 [英] Python setup.py: How to get find_packages() to identify packages in subdirectories

查看:0
本文介绍了Python setup.py:如何获取findPackages()来识别子目录中的包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个setup.py文件,其中findPackages()递归地查找包。在本例中,foobarbaz都是我想要安装的模块,并在python路径上可用。例如,我希望能够做import foo, bar, bazbar-packfoo-pack只是包含各种支持文件/目录(如特定于各个模块的测试、自述文件等)的常规非Python目录。

├── bar-pack
│   └── bar
│       └── __init__.py
├── baz
│   └── __init__.py
├── foo-pack
│   └── foo
│       └── __init__.py
├── setup.py

然后假设setup.py如下:

from setuptools import setup, find_packages
setup(
    name="mypackage",
    version="0.1",
    packages=find_packages(),
)

但是,当我运行python setup.py installpython setup.py sdist时,只识别和打包baz目录。

我可以进一步简化它,然后运行以下命令,但同样,只识别出baz

python -c "from setuptools import setup, find_packages; print(find_packages())"
['baz']

您知道如何扩展Find_Packages()的搜索路径(或手动硬编码搜索路径)吗?

感谢任何帮助。

推荐答案

这类似于对";foo";和";bar";包使用src-layout,但对";baz";布局使用平面布局。这是可能的,但需要在setup.py中进行一些自定义配置。

SetupTools‘find_packages支持关键字(docs),您可以使用该关键字。

setup(
    ...
    packages=(
        find_packages() +
        find_packages(where="./bar-pack") +
        find_packages(where="./foo-pack")
    ),
    ...
)

由于find_packages返回一个普通的旧列表,您也可以手动列出您的包,这可以说更容易/不那么神奇。

setup(
    ...
    packages=["baz", "bar", "foo"],
    ...
)

非标准目录结构意味着您还需要为distutils指定package_dir结构,该结构描述将安装的包放在哪里。

拼凑起来:

setup(
    name="mypackage",
    version="0.1",
    packages=["baz", "bar", "foo"],
    package_dir={
        "": ".",
        "bar": "./bar-pack/bar",
        "foo": "./foo-pack/foo",
    },
)

上述安装程序将在Site-Packages中创建此目录结构:

.venv/lib/python3.9/site-packages
├── bar
│   ├── __init__.py
│   └── __pycache__
│       └── __init__.cpython-39.pyc
├── baz
│   ├── __init__.py
│   └── __pycache__
│       └── __init__.cpython-39.pyc
├── foo
│   ├── __init__.py
│   └── __pycache__
│       └── __init__.cpython-39.pyc
└── mypackage-0.1.dist-info
    ├── INSTALLER
    ├── METADATA
    ├── RECORD
    ├── REQUESTED
    ├── WHEEL
    ├── direct_url.json
    └── top_level.txt

这篇关于Python setup.py:如何获取findPackages()来识别子目录中的包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆