python中自有(命名空间)包的Pip安装子包
我想从软件包中安装一些特殊的子软件包 例如,我想用pkg_a和pkg_b创建包。但是我想让用户选择他想要安装的 我想做的是:python中自有(命名空间)包的Pip安装子包,python,pip,package,setup.py,Python,Pip,Package,Setup.py,我想从软件包中安装一些特殊的子软件包 例如,我想用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', packag
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()
)
我在另一个问题的答案中看到了这一点,所以这一定是可能的:
我也读过,试着用
我在本机目录中尝试了一些带有附加setup.py的变体,但我无法处理它,我感谢所有帮助
使现代化
除了中华民国的答复外,我还进行了自己的回购。我创建了一个包含子包NmspcPing和NmspcPong的包Nmspc。但是我想让用户选择他想要安装的。此外,还必须能够安装整个软件包
我想做的是这样的:
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"
您的用例的解决方案似乎与我在这里给出的类似: ,以及您在问题中链接的: 这里有一个例子 目录树可能如下所示:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
3个Python项目:
- NmspcPing提供
nmspc.ping
- NmspcPong提供
nmspc.pong
- Nmspc依赖于其他两个项目(还提供
详见下文)Nmspc.\u Nmspc
nmspc.\u nmspc
有点隐藏(前面的下划线是Python中隐藏内容的命名约定)
NmspcPing/setup.py
(类似地NmspcPong/setup.py
):
Nmspc/setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
packages=['nmspc.ping',],
)
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
packages=['nmspc._nmspc',],
install_requires=['NmspcPing', 'NmspcPong',],
)
假设您位于根目录中,您可以按如下方式安装这些用于开发:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
然后你应该能够像这样使用它们:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
更新 这可以简化:
.
├── 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',],
)
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
package_dir={'nmspc.ping': 'nmspc.ping'},
packages=['nmspc.ping'],
)
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
package_dir={
'nmspc.ping': 'NmspcPing/nmspc.ping',
'nmspc.pong': 'NmspcPong/nmspc.pong',
},
packages=['nmspc.ping', 'nmspc.pong'],
)
像这样使用它:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
您的用例的解决方案似乎与我在这里给出的类似: ,以及您在问题中链接的: 这里有一个例子 目录树可能如下所示:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
3个Python项目:
- NmspcPing提供
nmspc.ping
- NmspcPong提供
nmspc.pong
- Nmspc依赖于其他两个项目(还提供
详见下文)Nmspc.\u Nmspc
nmspc.\u nmspc
有点隐藏(前面的下划线是Python中隐藏内容的命名约定)
NmspcPing/setup.py
(类似地NmspcPong/setup.py
):
Nmspc/setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
packages=['nmspc.ping',],
)
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
packages=['nmspc._nmspc',],
install_requires=['NmspcPing', 'NmspcPong',],
)
假设您位于根目录中,您可以按如下方式安装这些用于开发:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
然后你应该能够像这样使用它们:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
更新 这可以简化:
.
├── 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',],
)
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
package_dir={'nmspc.ping': 'nmspc.ping'},
packages=['nmspc.ping'],
)
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
package_dir={
'nmspc.ping': 'NmspcPing/nmspc.ping',
'nmspc.pong': 'NmspcPong/nmspc.pong',
},
packages=['nmspc.ping', 'nmspc.pong'],
)
像这样使用它:
.
├── Nmspc
│ ├── nmspc
│ │ └── _nmspc
│ │ └── __init__.py
│ └── setup.py
├── NmspcPing
│ ├── nmspc
│ │ └── ping
│ │ └── __init__.py
│ └── setup.py
└── NmspcPong
├── nmspc
│ └── pong
│ └── __init__.py
└── setup.py
$ 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;"
$ python3 -m pip install ./NmspcPing ./NmspcPong/ .
$ python3 -c "import nmspc.ping; import nmspc.pong;"
如果项目不是从PyPI之类的索引安装的,则无法利用
install\u requires
功能。可以这样做:
.
├── NmspcPing
│ ├── nmspc.ping
│ │ └── __init__.py
│ └── setup.py
├── NmspcPong
│ ├── nmspc.pong
│ │ └── __init__.py
│ └── setup.py
└── setup.py
NmspcPing/setup.py
(类似地NmspcPong/setup.py
)
setup.py
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
install_requires=['NmspcPing', 'NmspcPong',],
)
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
package_dir={'nmspc.ping': 'nmspc.ping'},
packages=['nmspc.ping'],
)
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
package_dir={
'nmspc.ping': 'NmspcPing/nmspc.ping',
'nmspc.pong': 'NmspcPong/nmspc.pong',
},
packages=['nmspc.ping', 'nmspc.pong'],
)
这允许以以下任意组合从根文件夹安装:
$ python3 -m pip install .
$ python3 -m pip install ./NmspcPing
$ python3 -m pip install ./NmspcPong
$ python3 -m pip install ./NmspcPing ./NmspcPong
如果项目不是从PyPI之类的索引安装的,则无法利用
install\u requires
功能。可以这样做:
.
├── NmspcPing
│ ├── nmspc.ping
│ │ └── __init__.py
│ └── setup.py
├── NmspcPong
│ ├── nmspc.pong
│ │ └── __init__.py
│ └── setup.py
└── setup.py
NmspcPing/setup.py
(类似地NmspcPong/setup.py
)
setup.py
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
install_requires=['NmspcPing', 'NmspcPong',],
)
import setuptools
setuptools.setup(
name='NmspcPing',
version='1.2.3',
package_dir={'nmspc.ping': 'nmspc.ping'},
packages=['nmspc.ping'],
)
import setuptools
setuptools.setup(
name='Nmspc',
version='1.2.3',
package_dir={
'nmspc.ping': 'NmspcPing/nmspc.ping',
'nmspc.pong': 'NmspcPong/nmspc.pong',
},
packages=['nmspc.ping', 'nmspc.pong'],
)
这允许以以下任意组合从根文件夹安装:
$ python3 -m pip install .
$ python3 -m pip install ./NmspcPing
$ python3 -m pip install ./NmspcPong
$ python3 -m pip install ./NmspcPing ./NmspcPong
这是一个相当令人困惑的问题。。。您是
本机项目的作者还是用户?为什么会让人困惑?不,我不是参考回购协议的作者。但是我想创建一个具有所描述功能的类似的。我更新了我的问题并试图澄清它。你被困在哪里了?你尝试了什么?@sinoroc我又更新了我的问题。我希望这更容易理解。你想要达到的目标总是相对清晰的。由于您已经找到了正确的文档和代码示例,现在还不清楚的是到底是什么阻碍了您。你能显示一些代码,一些错误信息吗?您至少能够构建和分发名称空间包吗?这是一个相当令人困惑的问题。。。您是本机项目的作者还是用户?为什么会让人困惑?不,我不是参考回购协议的作者。但是我想创建一个具有所描述功能的类似的。我更新了我的问题并试图澄清它。你被困在哪里了?你尝试了什么?@sinoroc我又更新了我的问题。我希望这更容易理解。你想要达到的目标总是相对清晰的。由于您已经找到了正确的文档和代码示例,现在还不清楚的是到底是什么阻碍了您。你能显示一些代码,一些错误信息吗?您至少能够构建和分发命名空间包吗?我再次更新了问题并添加了给定的错误消息。为什么需要隐藏的子包?不能简单地将整个包的setup.py放入根文件夹吗