我正在开发一个Python项目,我将与Jira API进行通信。我想使用"官方"适用于Python的Jira客户端here。
该软件包引入了全局命名空间jira
,这意味着您必须
from jira import JIRA
使用API。
如何创建子包
company.project.datasources.jira
不影响全局jira
包裹?
让我添加一些步骤来重现我的问题并展示我的想法:
这是我的目录布局:
.
├── company
│ ├── __init__.py
│ └── project
│ ├── datasources
│ │ ├── __init__.py
│ │ └── jira.py
│ └── __init__.py
└── test.py
公司/项目/数据源/ jira.py
# This should be the global class. I don't know how to import it
from jira import JIRA as BaseJira
class JIRA(BaseJira):
# Add something fancy here
pass
test.py
from company.project.datasources.jira import JIRA
custom_jira = JIRA()
当我尝试:
python test.py
我收到以下错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from company.project.datasources.jira import JIRA
File "/tmp/test/company/project/datasources/jira.py", line 2, in <module>
from jira import JIRA as BaseJira
ImportError: cannot import name JIRA
__init__.py
目前都是空文件。我和他们一起尝试了很多,但它对我没用。这些文件可能是我问题的关键吗?
答案 0 :(得分:4)
您正在使用Python 2,它在解决导入方面存在一些问题。它认为jira
是指相对于当前模块的jira
模块(在这种情况下,它们指的是相同的东西,但如果您还尝试从另一个模块执行此导入,也会发生这种情况到jira.py
)。
您需要启用Python 3的导入行为。在jira.py
中的任何其他内容之前添加以下导入(或者在与查看阴影包的同一级别的任何其他内容):
from __future__ import absolute_import
有关详细信息,请参阅PEP 328。摘要描述了一般问题:
面对包装,进口可能含糊不清;在一个包中,不清楚
import foo
是指包中的模块还是包外的某个模块。 (更确切地说,本地模块或包可以直接隐藏另一个挂起sys.path
。)建议所有import语句在默认情况下都是绝对的(仅使用
sys.path
搜索),使用特殊语法(前导点)来访问包相对导入。