gpt4 book ai didi

python - pip 从 python 中自己的(命名空间)包安装子包

转载 作者:行者123 更新时间:2023-11-30 21:54:54 24 4
gpt4 key购买 nike

我想从包中安装一些特殊的子包。

例如,我想用pkg_a和pkg_b创建包。但我想让用户选择他想要安装的。

我想做的事:

git clone https://github.com/pypa/sample-namespace-packages.git
cd sample-namespace-packages
touch setup.py

设置-py:

import setuptools

setup(
name='native',
version='1',
packages=setuptools.find_packages()
)
# for all packages
pip install -e native #Successfully installed native

# for specific
# Throws ERROR: native.pkg_a is not a valid editable requirement.
# It should either be a path to a local project
pip install -e native.pkg_a native.pkg_b

# for specific
cd native
pip install -e pkg_a # Successfully installed example-pkg-a

我在另一个问题的答案中看到了这一 pip ,所以它一定是可能的:Python install sub-package from package

我还阅读了 Packaging namespace packages documentation并尝试用 repo 来解决这个问题

我已经尝试了一些在 native 目录中带有附加 setup.py 的变体,但我无法处理它,我感谢所有帮助。

更新

除了 sinoroc 的回答之外,我还制作了一个自己的存储库。我创建了一个包 Nmspc,其中包含子包 NmspcPing 和 NmspcPong。但我想让用户选择他想要安装的。此外,还必须能够安装整个软件包。

我想做的是这样的:

git clone https://github.com/cj-prog/Nmspc.git
cd Nmspc

# for all packages
pip install Nmspc

# Test import
python3 -c "import nmspc; import nmspc.pong"
# for specific
pip install -e Nmspc.pong # or
pip install -e pong

# Test import
python3 -c "import pong;"

最佳答案

针对您的用例的解决方案似乎与我在这里给出的解决方案类似: https://stackoverflow.com/a/58024830/11138259 ,以及您在问题中链接的那个:Python install sub-package from package .

这是一个例子...

目录树可能如下所示:

.
├── Nmspc
│   ├── nmspc
│   │   └── _nmspc
│   │   └── __init__.py
│   └── setup.py
├── NmspcPing
│   ├── nmspc
│   │   └── ping
│   │   └── __init__.py
│   └── setup.py
└── NmspcPong
├── nmspc
│   └── pong
│   └── __init__.py
└── setup.py

3 个 Python 项目:

  • NmspcPing提供nmspc.ping
  • NmspcPong提供nmspc.pong
  • Nmspc 依赖于其他两个项目(并且还提供 nmspc._nmspc 请参阅下面的详细信息)

它们都是命名空间包。它们是使用 Python Packaging User Guide on "Packaging namespace packages, Native namespace packages" 中的说明构建的。 。还有一个例子here .

项目Nmspc基本上是空的,没有实际代码,但重要的部分是将另外两个NmspcPingNmspcPong添加为< em>安装要求。另一件需要注意的事情是,为了方便起见,它也是一个命名空间包,其中 nmspc._nmspc 是隐藏的(前导下划线是 Python 中隐藏事物的命名约定) )。

NmspcPing/setup.py(以及类似的NmspcPong/setup.py):

#!/usr/bin/env python3

import setuptools

setuptools.setup(
name='NmspcPing',
version='1.2.3',
packages=['nmspc.ping',],
)

Nmspc/setup.py:

#!/usr/bin/env python3

import setuptools

setuptools.setup(
name='Nmspc',
version='1.2.3',
packages=['nmspc._nmspc',],
install_requires=['NmspcPing', 'NmspcPong',],
)

假设您位于根目录,您可以像这样安装它们进行开发:

$ python3 -m pip install -e NmspcPing
$ python3 -m pip install -e NmspcPong
$ python3 -m pip install -e Nmspc

然后你应该能够像这样使用它们:

$ python3 -c "import nmspc.ping; import nmspc.pong; import nmspc._nmspc;"
<小时/>

更新

这可以简化:

.
├── NmspcPing
│   ├── nmspc
│   │   └── ping
│   │   └── __init__.py
│   └── setup.py
├── NmspcPong
│   ├── nmspc
│   │   └── pong
│   │   └── __init__.py
│   └── setup.py
└── setup.py

setup.py

#!/usr/bin/env python3

import setuptools

setuptools.setup(
name='Nmspc',
version='1.2.3',
install_requires=['NmspcPing', 'NmspcPong',],
)

像这样使用它:

$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"

关于python - pip 从 python 中自己的(命名空间)包安装子包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58134808/

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