问题标签 [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 回答
584 浏览

python - 使用 setuptools,命名空间包 __init__.py 文件何时消失?

setuptools文档非常明确地将代码__init__.py从命名空间添加到文件中:

您不得在命名空间包的__init__.py. 即使它在开发过程中似乎可以工作,或者当项目安装为 .egg 文件时,当使用“系统”打包工具安装项目时,它就无法工作——在这种情况下,__init__.py文件将不会被安装,更不用说执行了.

然而,我不明白这些“系统”打包工具是什么。这些是什么?__init__.py我怎样才能重现文件消失的这种情况?

0 投票
0 回答
491 浏览

python-2.7 - pip 卸载命名空间子包

如何使用 pip 卸载提供命名空间包的子包的发行版之一,而不会破坏仅使用其余发行版中此命名空间包的子包的程序?

我有 2 个发行版 (distribution{1,2}),提供命名空间包 (namespace1) 的 2 个子包 (package{1,2}):

分布1/命名空间1/__init__.py:

分布1/命名空间1/package1/__init__.py:

分布1/命名空间1/package1/module1.py:

分布1/setup.py:

分布2/命名空间1/__init__.py:

分布2/命名空间1/package2/__init__.py:

分布2/命名空间1/package2/module2.py:

分布2/setup.py:

和一个测试程序:

主要.py:

当我安装两个发行版并卸载其中一个(distribution2)时,示例程序失败:

它在“pip install --egg”时有效。在分发源文件夹中使用。但是由于鸡蛋被认为不推荐使用轮子,有没有没有这个“--egg”选项的解决方案?

环境:

  • Python 2.7.9
  • 安装工具 14.3.1
  • 点 6.1.1
  • 车轮 0.24.0
0 投票
1 回答
1859 浏览

python - Python 命名空间包的导入问题

我正在尝试使用 Python命名空间包概念将我的库拆分到多个目录中。一般来说,它可以工作,但我在将名称导入项目包级别时遇到问题。

我的项目结构如下:

示例项目结构

project1/coollibrary/__init__.py

project1/coollibrary/foomodule.py

project2/coollibrary/__init__.py

project2/coollibrary/barmodule.py

这两个项目都在 PATH 中:

我正在从这里运行代码:

如何修复代码,以便我可以直接从包中foo导入。此外,是否有适用于 Python2.7 和 Python3.4 的解决方案(不需要其他版本)。barcoollibrary

0 投票
2 回答
797 浏览

python - 带有命名空间包的 pyinstaller

我有一个模块/包结构,我在其中使用命名空间包,我有多个用户制作的库,我将它们保存在单独的存储库中,并且它们具有相当通用的名称,例如 db、io、utils 等。为了避免与其他包冲突,我有一个名为 acme 的顶级/命名空间包,即我的包是 acme.io、acme.db、acme.utils 等。为了完成这项工作,所有 acme 文件夹中的 __init__.py 都有以下几行

这在运行使用 python 中的这些包的软件时效果很好。

但后来我尝试使用 pyinstaller 制作 EXE。pyinstaller 只找到其中​​一个包。我尝试将 pathex 设置为每个库所在的文件夹:

在 dbrepo、iorepo 和 utilsrepo 文件夹中,有一个名为 acme 的文件夹,里面有上面提到的 __init__.py 文件和相应的包,即 db、utils 和 io,其中又有一个 __init__.py 文件。

但是 pyinstaller 只能找到 acme 和 acme.db 包。或者它只查找 pathex 变量中首先列出路径的包。

关于如何使这项工作的任何提示?

谢谢

0 投票
1 回答
142 浏览

python - 命名空间包的树形结构

我有一个名为的包networkx-metis,它具有以下树结构

networkx.addons.metis应该作为命名空间包安装在networkx核心包中。上面两个__init__.py包含单行代码

现在我有一些具体的问题,

  • networkx核心包应该有哪些变化?我应该把空__init__.py文件放在哪里?
  • namespace_packagesof 的insetup()的值应该是setup.py多少networkx-metis
0 投票
1 回答
265 浏览

python - 安装 Python 库后自动创建的奇怪文件

我有一个依赖于 C 库的 Python 库,所以我使用 Cython 来处理它。虽然我设法包装了库并准备好安装,但我遇到了一个奇怪的问题(注意:为了非广告,我没有使用库的名称)。

我有以下目录结构:

setup.py应该转换_lib.pyx为,_lib.so可以很容易地被 Python 导入。此外,library.module应该作为命名空间包安装,因此lib.__init__.py包含 PEP420 所需的单行代码。

但是当我这样做时:

在检查.egg创建后,我发现一个_lib.pycreated 里面module有以下几行

虽然_lib.py与 一起存在,但_lib.so只要lib.pyimports _lib,它就会导入 _lib.py 文件,而不是导入_lib.soC 库的实际 Python 包装器。

我想知道为什么_lib.py要创建以及如何避免它。

0 投票
1 回答
407 浏览

python - 命名空间包冲突

我有一个正在处理的包(LDB_Algebra)。它有一个额外的依赖于我创建的另一个包(LDB_LAPACK)。我创建了一个 virtualenv 并安装了每个包,如下所示:

__init__.py每个在 ldb 包下的文件都有以下内容:

问题:

问题是当我尝试使用ldb.algebra它时报告它找不到包。只是为了确保它没有完全丢失我尝试导入的所有内容ldb.lapack并且工作正常。这向我表明我遇到了命名空间包问题。似乎在这里提出了类似的问题(遗憾的是没有答案)。在调查我的 virtualenv 的目录结构后,我发现ve_pypy/site-packages/在命名空间包下有一个文件夹,ldb其中包含lapack包但不包含algebra包。我还看到了一个 egg 文件,LDB_Algebra-0.3.2-py2.7.egg. 在ldb目录中的这个 egg 文件中是一个__init__.py带有适当命名空间声明的文件(如上)。大概这应该是它得到的地方ldb.algebra包,但它不在那里。

问题:

  1. 任何人都可以通过参考确认我所看到的是一个已知问题(即我不只是做一些轻微的错误导致所有这些麻烦)?egg 和 w/e 创建的 pip install 方法(ldb下的包目录site-packages)根本不兼容吗?

  2. 假设第一个问题的答案是我的软件包安装方法存在根本缺陷,是否有更简单的方法可以LDB_LAPACK从 pypi 安装软件包并LDB_Algebra从我的本地目录安装软件包?我不是 setuptools wiz 或任何其他人,所以答案可能非常简单(不要忽视显而易见的问题)。

0 投票
1 回答
362 浏览

python - 导入 Python 命名空间包的本地测试版本

我想知道如何导入 Python 2.7 命名空间包的本地测试版本。在此示例中,包Ska.engarchiveSka根目录下的命名空间包。(这种结构是由遗产强加给我的)。

这个例子表明,即使设置sys.path为从本地目录开始,包的安装版本也会被导入,而不是本地版本。

我认为这个问题与命名空间包在 Python 2 中实现的方式有关,无论如何命名空间路径总是在列表的前面。但也许有一些解决方法?我花了一些时间挖掘site包文档,但也许我只是没有看到正确的东西。

上面的示例使用的是 Anaconda Python 发行版。有趣的是,如果我使用来自 ActiveState 的非常旧的 Python 版本,则该示例具有导入本地包的预期结果:

任何帮助将不胜感激!

0 投票
1 回答
151 浏览

python - 我应该默认创建新的 python 包作为命名空间包吗?

Python 3.3 具有隐式命名空间包 (PEP420),在 Python 2.7 中,可以通过在 __init__py 中添加两行来将包标记为命名空间包。请参阅如何在 python 中创建命名空间包

鉴于包启用的功能,看起来新包应该默认创建为命名空间包。

普通的 python 包应该只在明显需要“封闭”包的特殊情况下使用。

这种方法有什么缺点?

0 投票
1 回答
1105 浏览

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

我正在尝试使用 Py2exe 为使用 webview 加载网站的应用程序创建一个可执行文件,该文件是使用 pip 上的 pywebview 包创建的,但我不断收到此错误消息:-

在以下链接上的 github 上执行示例时会弹出错误:- https://github.com/r0x0r/pywebview/blob/master/examples/py2exe_setup.py