gpt4 book ai didi

Python 设置.py : How to get find_packages() to identify packages in subdirectories

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:06 26 4
gpt4 key购买 nike

我正在尝试创建一个 setup.py 文件,其中 find_packages() 递归地查找包。在此示例中,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() 的搜索路径(或手动硬编码搜索路径)吗?

感谢任何帮助。

最佳答案

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

Setuptools 的 find_packages 支持“where”关键字 ( docs ),您可以使用它。

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

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

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

非标准目录结构意味着您还需要指定 package_dir distutils 的结构,它描述了放置已安装 包的位置。

拼凑起来:

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

上述安装程序将在站 pip 包中创建此目录结构:

.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 设置.py : How to get find_packages() to identify packages in subdirectories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54430694/

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