Python 命名空间包清除文件夹结构



我想设置一个python命名空间包,其中包含几个连接的包,除非明确指定,否则这些包需要独立安装。然而,现有的解决方案对我来说似乎更不混乱。

例如,其中一个包包含大部分问题逻辑,其他包包含辅助功能,例如绘图和数据导出。逻辑包需要保持纤薄,不能导入超过numpy,而其他包可以利用更复杂的包,如pandasmatplolib我想设置一个包结构,它看起来像命名空间包的结果命名空间,但没有不必要的文件夹嵌套如下内容:

namespace
├── logic
│    ├── __init__.py
|    ├──  functions.py
│    └──  setup.py # requires numpy    
├── datastructure
│    ├── __init__.py
|    ├──  functions.py
│    └──  setup.py # requires namespace.logic and pandas
├── plotting
│    ├── __init__.py
|    ├──  functions.py
│    └──  setup.py # requires namespace.logic, namespace.datastructure and matplotlib
└── setup.py #should install every package in namespace

我认为这看起来像一个带有模块的传统包,但我还没有找到一种方法将其设置为一个 packgae,同时维护仅安装特定模块的选项,因此我认为命名空间包应该提供该选项,但我不能完全让它与pip一起使用

目前,我需要再有两个这样的目录级别:

namespace
├── NamespaceLogic          #don't want this
│   ├── namespace           #don't want this
│   │   └── logic
│   │       └── __init__.py
│   └── setup.py
├── NamespaceDatastructure  #don't want this
│   ├── namespace           #don't want this
│   │   └── datastructure
│   │       └── __init__.py
│   └── setup.py
├── NamespacePlotting       #don't want this
│   ├── namespace           #don't want this
│   │   └── plotting
│   │       └── __init__.py
│   └── setup.py
└── setup.py

我的问题类似于这个问题:Python pip 从自己的包安装子包,但我想避免使用许多子文件夹,因为这会带来最大化系统路径长度限制的风险(+它使其他人感到困惑(。我需要如何配置不同的 setup.py 文件才能运行

pip install namespace #installs namespace.logic, namespace.datastructure, namespace.plotting
pip install namespce.logic #installs only namspace.logic and works in an environment with numpy which does not have pandas or matplotlib

您可以使用 setuptools 的package_dir选项来摆脱命名空间包的空文件夹:

NmspcPing
├── ping
│   └── __init__.py
└── setup.py
import setuptools
setuptools.setup(
name='NmspcPing',
version='0.0.0.dev0',
packages=['nmspc.ping'],
package_dir={'nmspc.ping': 'ping'},
)

类似以下内容也是可行的,但根据项目的构建或安装方式,setup.py文件也可能作为包的一部分包含在内(这可能是不需要的(:

.
├── ping
│   ├── __init__.py
│   └── setup.py
├── pong
│   ├── __init__.py
│   └── setup.py
└── setup.py

如果路径长度限制是一个问题,那么使用较短的包名称可能是更好的选择。因为在许多情况下,包无论如何都会与所有目录级别一起安装(除非它们保持压缩状态(,即使您在源代码存储库中跳过它们也是如此。

老实说,如果确实发生了路径长度限制问题,我会感到惊讶,我相信它仍然会发生在您无法控制的事情上(例如 3rd 方包:numpy、pandas、plotlib 可能也有很多嵌套的子包(。

相关内容

  • 没有找到相关文章

最新更新