当前位置: 首页 > 面试题库 >

打包常见的python名称空间

金成济
2023-03-14
问题内容

我希望在接下来的几天中将必须打包的库打包并上载到PyPI,但是我不确定我对命名空间的使用方式。

我有一些其他的,不相关的项目,它们具有相似的方法,并希望为它们提供相同的名称空间。例如:

  • 库1名称空间: abc.seo
  • 库2名称空间: abc.ajax
  • 库3名称空间: abc.ecommerce
  • 等等

问题是我不确定两个单独的程序包(例如鸡蛋)是否可以与同一个父名称空间共存。这种方法有问题吗,还是可以解决?最好的方法是什么?

这些库不应打包在一起,因为它们太不相关了。我想在上传之前正确处理它,以避免在进行“正式”发布后痛苦的命名空间更改。

(NBabc不是真实的名字,我希望我的问题不包含广告)

更新

我采取了以下措施,以使没有安装setuptools的人们感到高兴:

try:
    __import__('pkg_resources').declare_namespace(__name__)
except ImportError:
    __path__ = __import__('pkgutil').extend_path(__path__, __name__)

在以下内容中setup.py

setup(
    ...
    namespace_packages = ['rollyourown'],
    ...

问题答案:

在每个项目基本目录中,创建以下结构:

/setup.py
/abc/__init__.py
/abc/seo/

/abc/__init__.py 包含:

__import__('pkg_resources').declare_namespace(__name__)

setup.py 包含:

setup(...,
    packages: ['abc', 'abc.seo'],
    namespace_packages = ['abc']
    ...
)

参考文档:名称空间包。



 类似资料:
  • 问题内容: 经常看到com。*软件包名称空间。“ com”是什么意思?谢谢。 问题答案: 包的命名约定在JLS中指定。这是相关的代码段(本节中还有很多内容): [JLS 7.7唯一程序包名称](http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.7) 您首先要拥有(或属于拥有)互联网域名的组织,从而形成唯一的软

  • 前言 APP打包执行过程中,如未成功生成APP包,会在执行窗口出现如下图的报错信息,需要从最底端往上查看错误信息。 如果是使用打包代理服务打iOS App包,则需查看“代理服务日志”。 如果是打Android App包,则只查看“日志”。 如果是MAC版,则不区分“日志”和“代理服务日志”,直接查看当前执行窗口的报错信息即可。 查看时重点关注出现【BUILD FAILED】【security】【E

  • 问题内容: 在Python中,命名空间包可让您在多个项目中传播Python代码。当您要将相关的库作为单独的下载发布时,这很有用。例如,目录和中, 最终用户可以和。 定义名称空间包的最佳方法是什么,以便多个Python产品可以在该名称空间中定义模块? 问题答案: TL; DR: 在Python 3.3上,您无需执行任何操作,只需将任何内容都不放在名称空间包目录中即可使用。在3.3之前的版本中,请选择

  • 问题内容: 我刚刚开始学习Python,并在Python中遇到了 “命名空间” 概念。虽然我了解了它的本质,但无法理解这个概念的严重性。 网上的一些浏览显示,反对PHP的原因之一是它没有对名称空间的本地支持。 有人可以解释如何使用名称空间以及此功能如何使编程更好 (不只是在Python中,因为我假设名称空间的概念不限于特定语言)。 我主要来自Java和C编程背景。 问题答案: 命名空间是一种实现范

  • 问题内容: 有没有一种方法可以在python ElementTree中定义默认/无前缀的命名空间?这似乎不起作用… 这也不是: 可以,但是我必须在每个元素前加上前缀: 在OSX上使用Python 3.5。 编辑:如果答案为“否”,您仍然可以获得赏金:-)。我只是想要一个花了很多时间使用它的人的明确“否”。 问题答案: 没有简单的方法可以透明地处理默认名称空间。正如您已经提到的,为空名称空间分配非空

  • 问题内容: 命名空间Python程序包(no )和常规Python程序包(具有)之间有什么区别,尤其是对于常规程序包为空时? 我很好奇,因为最近我一直忘了自己制作的包装,而且我从没发现任何问题。实际上,它们的行为似乎与常规软件包相同。 编辑:命名空间包仅受Python 3.3支持(请参阅PEP 420 ),因此自然地,此问题仅适用于Python 3。 问题答案: 阅读Aaron和PEP420的链接