问题标签 [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 投票
2 回答
2362 浏览

python - Py2exe 错误:尚不支持命名空间包:跳过包“雪花”

我一直在尝试使用 py2exe 为以下脚本生成 .exe :

代码非常简单,就像一个魅力。

我希望使用 py2exe 将其转换为 .exe,但当时我收到以下错误:

Snowflake 是一个允许我连接到我的数据库的包(一个雪花数据库,相当新)

我的操作系统是:Windows 10,Python 版本 3.5.1

我的 py2exe 的 setup.py :

我环顾四周,找不到这个问题的任何答案。如果有人有想法。

在此先感谢您的帮助。

0 投票
2 回答
1402 浏览

python - 同一命名空间中的包:无法在安装脚本中导入模块

我很好奇下面的情况。假设我有两个名为project_alphaand的项目project_bravo,它们都定义了一个顶级命名空间包mymeta。布局:

两个mymeta/__init__.pys 仅包含该行__import__('pkg_resources').declare_namespace(__name__)(根据setuptools 文档中的命名空间部分)。两个version.pys的内容:

setup.py脚本project_alpha非常简单。命名空间包mymeta被声明,版本取自version模块:

setup.py脚本project_bravo具有相同的结构,但有一点不同:project_bravo取决于project_alpha构建时间:

构建时project_bravo,我收到以下错误:

不幸的是,我不明白这里的错误。跟进口订单有关系吧?如果我注释掉mymeta.project_bravo.versionin的导入project_bravo/setup.pyversion用一些硬编码的字符串替换,突然构建成功......


编辑:我为这个问题介绍了一个解决方法。我没有尝试直接导入版本,而是exec使用版本模块来避免导入问题。当然,这不是一个正确的解决方案,因此没有将其发布为答案,但仍然在这里:

读取并执行版本脚本后,版本被初始化,因此无需从mymeta包中导入任何内容。

0 投票
2 回答
1402 浏览

python - 列出一个命名空间包的所有子包

Python 有能力创建一个命名空间包。如何获取命名空间下已安装包的列表?

即类似的东西:

0 投票
1 回答
2108 浏览

python - Python 3.6.0 隐式命名空间包

我在 Python 3.6.0rc1 中发现了隐式命名空间包的奇怪行为。你能告诉我我是错的还是 Python 3.6 的错误?

我正在使用名称空间包marrow,它有两个单独的包marrow.utilmarrow.mailer. 第二个取决于第一个。

假设我们已经marrow.util安装site-packages了 Python 2.7、3.5 和 3.6:

这里没有__init__.py文件,这是正确的,因为marrow是命名空间包。您可以在安装过程中看到此日志消息:

然后您在其他目录中构建(但未安装)marrow命名空间包的第二部分。marrow.mailer例如像这样:

当我在此文件夹中运行 Python 2.7.12 或 3.5.2 并尝试导入marrow.util(从站点包)时,它按预期工作。

但是当我尝试使用 Python 3.6 导入相同的模块时,它失败了:

当我尝试marrow.mailer在 Mock 中构建为 RPM 包时,我发现了这个问题。使用 Python 2.7 和 3.5 一切正常,但 Python 3.6 无法marrow.util从站点包导入,因此marrow.mailer在构建 RPM 期间测试失败。

来自失败测试的示例回溯:

我在 Python 3.6 的变更日志中找不到与此问题相关的任何内容。

谢谢你的帮助。

编辑:我已经检查sys.path了 Python 3.6,一切看起来都很好:

编辑2:

因为我仍然找不到任何解决方案并且我没有任何响应,所以我创建了一个简单的 Bash 脚本来重现我的情况。您唯一需要的是 Python 3.5 和 Python 3.6。

如果您使用 Python 3.5 执行此脚本,您将看到 Python 3.5 可以marrow.util通过 pip 导入安装,但无法导入marrow.mailer本地文件夹。但是 Python 3.6 可以导入本地模块marrow.mailer,但不能导入模块marrow.util

0 投票
2 回答
8406 浏览

python - Python3 中的 Python 命名空间包

命名空间包的主题对于外行来说似乎有点令人困惑,而且以前版本的 Python 已经以几种不同的方式实现了它,或者 StackOverflow 上的很多问答都过时了,这无济于事。我正在寻找解决Python 3.5方案

#场景:我正在将一堆 Python 代码重构为模块和子模块,并努力将这些项目中的每一个设置为在同一个命名空间中相互独立运行。

我们最终将使用内部 PyPi 服务器,将这些包提供给我们的内部网络,并且不想将它们与外部(公共)PyPi 包混淆。

示例: 我有 2 个模块,我希望能够执行以下操作:

反射的模块将这样分离:

存储库 1:

存储库 2:

我的 Git 存储库已经设置为org_client_client1_mod1and org_common_config,所以我只需要对打包和__init__.py文件执行设置,我相信。

问题:

#1

使用__init__.py,我应该使用哪些(如果有的话)?:

或者:

#2

使用setup.py, 我还需要添加namespace_modules参数吗?如果需要,我会使用namespace_modules=['org.common'], 还是namespace_modules=['org', 'common']?

#3

我可以通过以某种不同的方式实现这一点来放弃上述所有内容吗?也许更简单或更“pythonic”的东西?

0 投票
1 回答
848 浏览

python-3.x - “python setup.py build_sphinx”和“sphinx-apidoc --implicit-namespaces”

sphinx-apidoc 支持选项 --implicit-namespaces 来根据 PEP420 处理命名空间包。当我使用“python setup.py build_sphinx”创建 Sphinx 文档时,默认情况下这不适用于命名空间包。“python setup.py build_sphinx”和 sphinx-apidoc 之间是否存在关系(例如,当“python setup.py build_sphinx”运行时,sp​​hinx-apidoc 是否在某处隐式调用?)?如果是这样,我能否以某种方式指定“python setup.py build_sphinx”应考虑 sphinx-apidoc 的 --implicit-namespaces 选项?

0 投票
1 回答
836 浏览

python - 分发命名空间包子模块

我已将我的 Python 项目重组为同名伞下。我的项目现在可以被视为多个子系统,而不是相互依赖。这意味着现在可以单独分发每个子模块,以便只安装所需的依赖项。

旧结构:

新结构:

如您所见,除了myproj现在是命名空间包和子包common之外没有太大变化subpackage1subpackage2现在可以独立分发。

是否有可能,仍然保留一个唯一的setup.py文件,创建 3 个独立的包?

  • myproj.common
  • myproj.subpackage1
  • myproj.subpackage2

另外我想指定在安装时myproj.subpackage1,myproj.common是必需的,或者myproj.subpackage2同时需要myproj.commonand myproj.subpackage1

0 投票
1 回答
797 浏览

python - mypy 和分发命名空间包

我有一组要在 python3.6 环境中运行的命名空间包。

它们分别设置如下:

所有的子包都可以并排安装。

当我想通过mypy. 在(例如)的源文件上运行时mypy无法找到子包,这意味着我没有跨子包边界进行健壮的类型检查。mynamespace.coremynamespace.subpackage

这似乎是一个已知问题: https ://github.com/python/mypy/issues/1645

Guido 提到解决方法是“添加一个虚拟对象__init__.py__init__.pyi文件”,但他并没有真正详细说明,事实证明这对我来说并不像我希望的那样明显。将这些文件添加到本地repo 允许 mypy 按预期在本地 repo 上运行,我不知道如何访问同级命名空间包中的键入信息。

我的问题是:我将如何修改mynamespace.core——以便在安装时mypy能够在其他模块中获取它的类型信息?

0 投票
0 回答
288 浏览

python-3.x - 在 site-packages 目录结构中安装 python 3.6 命名空间包

问题:

我无法在预期的目录结构(在 Lib/site-packages 下)中的 3.6.4 虚拟环境中安装源分发命名空间包。

背景:

我正在使用 2 个不同版本的 python 中的命名空间包。

当我使用 pkgutils 样式 ns 打包在 2.7.14 中构建包时,我可以安装并且目录结构按照我想要的方式展开。

当我在 3.6.4 中构建包时,会安装包,但未按预期创建目录结构。

设置:

我有 2 个虚拟环境。

在工作中,我使用 2.7.14 兼容的 pkgutils 命名空间包功能。我正在为这个虚拟环境使用 virtualenv 来确认安装,它会按照我的意愿安装。目录结构按预期显示在我的 venv/Lib/site-packages 中,因此 venv/Lib/site-packages/tools/sub_a 存在。

在非工作中,我使用每个 PEP420 的 venv 和隐式命名空间打包

这是我的 3.6.4 包目录结构:

我的子包 init 里面只有以下内容:

这是我的 setup.py

该包使用 python setup.py sdist 构建,我将 tar.gz 文件传输到虚拟环境目录根目录,然后运行

这安装得很好,但是当我导航到虚拟环境 Lib/site-packages 目录时,tools/sub_a 目录结构不存在。

我看到了 tools_sub_a-1.0.0.dist-info,但没有看到预期的命名空间包目录。

0 投票
0 回答
91 浏览

python-3.x - python 设置工具创建不需要的隐式命名空间包?

我正在使用安装工具来安装自定义包。当我安装它时,它工作正常,但如果我使用 python,我可以导入我不打算提供的东西,我想防止这种情况发生。

我的 setup.py 看起来像这样:

我的目录是这样设置的:

在 python 中,我现在可以没有问题,import myapp但我也可以import static并且这三个都不包含文件或任何文件,因此它们可导入是没有意义的。我的设置文件中是否有什么问题导致了这种情况?import resourcesimport apps__init__.py

编辑:根据 hoefling 的评论,我尝试将空白的init .py 添加到顶级目录,但不需要的目录仍然成为可导入的包。有没有办法明确防止这种情况?