我想知道如何导入一个Python 2.7版本的本地命名空间。在本例中,包Ska.engarchive
是根目录下的命名空间包。(这个结构是由传统强加给我的)。在
{3}示例显示,即使在本地版本的cd3>安装后,也不会安装本地版本。在
Python 2.7.9 |Continuum Analytics, Inc.| (default, Apr 14 2015, 12:54:25)
...
In [1]: import sys
In [2]: sys.path.insert(0, '.')
In [3]: import Ska.engarchive.fetch_eng as fetch
In [4]: fetch.__file__
Out[4]: '/proj/sot/ska/arch/x86_64-linux_CentOS-5/lib/python2.7/site-packages/Ska.engarchive-0.36.2-py2.7.egg/Ska/engarchive/fetch_eng.pyc'
我认为这个问题与python2中实现名称空间包的方式有关,不管怎样,名称空间路径总是位于列表的前面。但也许有一些解决办法?我花了一些时间研究site
包文档,但也许我只是没有看到正确的东西。在
上面的示例使用Anaconda Python发行版。有趣的是,如果我使用ActiveState中的Python的一个非常旧的版本,那么这个示例将获得导入本地包的预期结果:
^{pr2}$任何帮助都将不胜感激!在
我能够使用setuptools的namespace packages(但不是标准的pkgutil method)复制这种行为。Setuptools将导入已安装的包,而pkgutil将导入本地包。Setuptools似乎是从预期的(首先安装,然后本地安装)向后加载
__path__
。E、 g.,(参见底部示例了解nstest的定义)解决这个问题的方法是将
^{pr2}$__path__
前面的本地包添加到最右边的命名空间包中。E、 g既然您在问题中说
Ska.engarchive
是一个名称空间包,那么在您的解释器中,您需要执行以下操作:使用setuptools的pkg_资源进行命名空间测试
目录结构:
nstest.foo/设置.py:
nstest.foo/nstest/\u初始化__.py:
nstest.foo/nstest/foo//__.py:
安装:
测试:
相关问题 更多 >
编程相关推荐