Python 2.7 带有合并命名空间的Python工具

Python 2.7 带有合并命名空间的Python工具,python-2.7,enthought,Python 2.7,Enthought,我目前正在使用pythonxy包中的Python2.7 在我的软件中,我需要使用自己的user\u manager和其他权限工具。因此,我需要将外部源添加到apptools.permissions 在apptools文档中,它说我需要开发另一个具有名称空间的egg,apptools.permissions.external 因此,我开发了一个具有三个级别的文件夹: 应用工具 apptools.permissions apptools.permissions.external 和setup.py

我目前正在使用pythonxy包中的Python2.7

在我的软件中,我需要使用自己的
user\u manager
和其他权限工具。因此,我需要将外部源添加到
apptools.permissions

在apptools文档中,它说我需要开发另一个具有名称空间的egg,
apptools.permissions.external

因此,我开发了一个具有三个级别的文件夹:

  • 应用工具
  • apptools.permissions
  • apptools.permissions.external
  • 和setup.py
在setup.py中,我写道:

# 3

from setuptools import setup, find_packages

setup(
      name = "apptools.permissions.external",
      author = "Airbus",
      version = '0.1' ,
      include_package_data = True, package_data={'': ['*.*']},
      packages = find_packages(),#exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
      test_suite = 'nose.collector',
      entry_points = """

      [envisage.plugins]
      apptools.permissions.external = apptools.permissions.external.permissions_plugin:ExternalPermissionsPlugin

      """,
      #install_requires = ['Aerocity==1.01'],
      zip_safe=True,
      namespace_packages = ['apptools', 
                            'apptools.permissions', 
                            'apptools.permissions.external',
                            ],
)
然而,在我开发了
python setup.py
之后。我转到python并尝试导入apptools.permissions.external

Python告诉我:

>>> import apptools.permissions.external
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named external
导入apptools.permissions.external 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ImportError:没有名为external的模块 所以它不知怎么的找不到这个外卵。但是,如果我快速将
apptools
的名称更改为like
apptools\u test
,并在文件夹和
setup.py
中关联。我实际上可以导入apptools\u test.permissions.external

因此,我认为将namespace
apptools.permissions.external
合并到
apptools
时会出现一些问题。Python不知怎么搞糊涂了


有人能帮我解决这个问题吗?

apptools.permissions
是很久以前在
enthund时设计的。permissions
enthund
是一个命名空间包。我们早就停止这样做了,并将大部分ETS重构为单独的包(遗憾的是,
apptools
仍然是一个垃圾包)。当我们这样做时,似乎没有人注意到它(ab)使用了这样的名称空间包。很抱歉。我们自己不怎么用。不管它给你带来什么寒冷的舒适,你都要接受它。:-)


它执行这种间接寻址的唯一位置是
\u*\ u default()
方法,因此您应该能够为这些特性分配自己的实例。我真的不知道为什么尝试使用名称空间扩展机制。

你好,Robert,非常感谢您的回复。别担心。这与我们的Legance软件有关。它是使用Python2.5和enthunk.permissions设计的。我正在升级到Python2.7,遇到了这个问题。非常感谢你的建议。我在apptools.permissions中查看了init.py,它没有declare\u名称空间。我把它加进去,然后一切都好了。也许,我们需要找到一个更好的名称空间来填充它在未来。如果你能给我任何建议,我会很高兴的。非常感谢。