问题标签 [namespace-package]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
138 浏览

python - Python 如何从 sys.path_importer_cache 中删除路径(无效的命名空间导入)

我有一个奇怪的现象(Windows,python 3.8.5):我有一个文件夹:c:\myfolder. 不知何故,这个文件夹进入了sys.path_importer_cache, 现在 c:\myfolder 中的每个子文件夹都可以作为命名空间包导入。例如,有这个子文件夹:c:\myfolder\foo\ 如果我尝试导入 foo,我会得到:

它的加载器是一个NamespaceLoader.

问题是,它 foo本身就是一个包,它被安装到站点包中,现在它没有从那里导入,因为这个奇怪的命名空间包打败了它。

我搞砸了什么?我在哪里看?我只能找到这个提示,即c:\myfoldersys.path_importer_cache. 但它为什么会到达那里?我怎样才能删除它?(我试过importlib.invalidate_caches()了,没有成功……)还有一个提示:如果我在隔离模式下运行python(python -I),这个问题就消失了。但是,我的用户站点中没有任何可能导致它的东西(据我所知。)

有任何想法吗?谢谢!

0 投票
1 回答
363 浏览

python - 是否可以使用 sphinx-apidoc 在同一个 git 存储库中为多个包创建文档?

我有一个 git 存储库,其中包含多个遵循命名空间的包(即PEP 420

我正在尝试使用 Sphinx 创建 ReadTheDocs 文档。

git 存储库看起来像这个 repo:https ://github.com/pypa/sample-namespace-packages

为了在我的本地机器上进行测试,我使用了 Sphinx 的 docker image sphinxdoc/sphinx

我尝试使用不同的方法为我的所有包生成文档,但每种方法最终都会遇到不同的问题。

狮身人面像-apidoc

docker run -it -v 密码:/repo --rm rtd bash -c 'make clean && rm -rf /repo/docs/_source/* && sphinx-apidoc -F -o /repo/docs/_source /repo && make html'

这样做的问题是它会生成错误的包,因为sphinx-apidoc它使用子文件夹来生成包,这是错误的。这最终会pkg_resourcespkg_a.example_pkg.a是不存在的,实际上应该是example_pkg.a

autoapi.extension

我也试过这个,但不幸的是,这最终没有在 HTML 中显示任何关于我的包的信息,同时还抛出以下警告:

所以,我的问题是是否可以使用 sphinx-apidoc 在同一个 git 存储库中为多个包创建文档?

0 投票
1 回答
246 浏览

setuptools - PyPI打包、命名空间包和子打包问题

我已经将我的个人通用函数上传ofunctions到 github,以便在我的项目之间共享它们,并进行单独的 CI 和覆盖测试。在此处链接到 github 项目。

到目前为止一切顺利,我有一个名为的包ofunctions,其中有几个子包,例如ofunctions.network.

我希望能够安装子包而不必安装整个包,即pip install ofunctions.network. 所以我创建了一个setup.py文件来创建必要的 dist 文件以上传到 PyPI。

我的问题:

每当我使用python setup.py sdist bdist_wheel时,它都会为每个子包生成完整ofunctions包和一个包,但是:

  • 源包ofunctions.network-0.5.0.tar.gz只包含子包(预期行为)
  • ofunctions.network-0.5.0-py3-non-any.whl包含整个包的轮包(意外行为)

Wheel 包包含整个ofunctions库,包括所有子包,这些子包显然应该只包含与源 dist 文件相同的子包。

任何人都可以看看我的setup.py文件并告诉我为什么 sdist 和 wheel 文件不包含严格相同的子包吗?

谢谢 8-|

0 投票
0 回答
51 浏览

python - 我可以混合使用普通包和命名空间包吗?

我想创建一个可以通过插件扩展的程序。我有一个结构,在安装所有包后似乎可以工作,但我不确定我所做的是否真的受支持:核心功能将由“普通”包提供,插件通过命名空间提供包。这是一个显示结构的最小示例:

项目结构

  • 00_core_package 为核心逻辑而不是命名空间包。
  • 01_foo_plugin 和 02_bar_plugin 作为两个示例包,它们是名称空间包,名称空间根 ( myprog) 与核心包相同。

当我在本地通过pip install .这三个包时,一切似乎都工作正常,但我不确定这是否真的是命名空间包的受支持用例。我的担忧是:

  • Python Packaging User Guide和引用的示例项目仅描述了两个子包都是真正的命名空间包的用例,即“根”命名空间本身不是独立的包。它还指出:

使用命名空间包的每个发行版都忽略__init__.py或使用 pkgutil-style是非常重要的__init__.py。如果任何发行版没有,它将导致命名空间逻辑失败,并且其他子包将无法导入。

  • 正如您在屏幕截图中看到的,PyCharm 无法正确索引项目,并且无法解析插件的导入。我可以通过以下任一方式解决此问题:
    • 将 00_core_package 取消标记为源根目录 - 这是不切实际的,因为我想将所有相关代码保留在同一个项目中。
    • 使核心包本身成为名称空间包,并将所有内容放在下面myprog.core

PyCharm 中的导入错误是我在这里做错了什么的第一个迹象,还是这更像是 PyCharm 本身的错误?

0 投票
0 回答
18 浏览

python - 为隐式命名空间包自动导入子包

在常规包装中:

为了能够做到

在没有缺少属性错误的情况下,您需要该__init__.py文件包含:

__init__.py

sub_package_a/__init__.py

sub_package_b/__init__.py

使用隐式命名空间包:

有可能实现吗?

目前我拥有的最好的是:

0 投票
1 回答
157 浏览

python - Namespaces 封装了几个层次,和 sphinx

我正在尝试在像“com.company”这样的命名空间中使用像“project-a”这样的包,并带有隐式命名空间。

我发现 sphinx-apidoc 没有将我的包放入文档中的 toc 中,我怀疑是因为 thecomcompany命名空间中都没有任何内容。

sphinx-apidoc 与 pyscaffold--implicit-namespaces的标准配置一起运行,为我提供了一个基本项目。

我在 sphinx-build 输出中得到以下信息:

在我开始研究狮身人面像代码之前有什么想法吗?

我已经在这里发布了代码 - 目前真的没什么:https ://github.com/nward/com_company_project-a

0 投票
1 回答
22 浏览

python - 如何通过将包 egg 添加到 sys.path 来加载隐式命名空间包?

从 python 3.3 开始,支持隐式命名空间包,所以我可以有两个包:

和进口a.ba.c没有问题。但似乎我只能用pip install; 如果我只创建任一包的 egg 并将 egg 路径添加到sys.path,则无法加载模块: