Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中自有(命名空间)包的Pip安装子包_Python_Pip_Package_Setup.py - Fatal编程技术网

python中自有(命名空间)包的Pip安装子包

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

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

例如,我想用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()
)
我在另一个问题的答案中看到了这一点,所以这一定是可能的:

我也读过,试着用

我在本机目录中尝试了一些带有附加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基本为空,没有实际代码,但重要的是增加另外两个NmspcPing和NmspcPong作为安装要求。另一件需要注意的事情是,为了方便起见,它也是一个名称空间包,其中
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基本为空,没有实际代码,但重要的是增加另外两个NmspcPing和NmspcPong作为安装要求。另一件需要注意的事情是,为了方便起见,它也是一个名称空间包,其中
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放入根文件夹吗