我的代码中的python模块/包使用有些困难。代码在这里:https://github.com/cjlano/svg
.
└── svg
├── geometry.py
├── __init__.py
├── LICENSE
├── README.md
├── svg.py
├── svg.test.py
└── tests
└── [...]
在模块svg
中,我需要使用模块geometry
。由于当所有代码都在svg.py
时,该模块不存在,我决定将整个geometry
命名空间导入svg(from geometry import *
)。
我的问题是,当我从我的包中导入svg
模块时,它在python2中运行良好但在python3中失败:
Python 2.7.5 (default, Sep 6 2013, 09:59:46)
[GCC 4.8.1 20130725 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from svg import svg
>>> help(svg)
授予我访问svg
模块文档的权限。而
Python 3.3.2 (default, Sep 6 2013, 09:35:59)
[GCC 4.8.1 20130725 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from svg import svg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "./svg/svg.py", line 27, in <module>
from geometry import *
ImportError: No module named 'geometry'
导入时出错。
关于如何编写我的代码以便在python3中使用的任何想法?
谢谢!
答案 0 :(得分:1)
如果在svg.py
中使用相对导入,它将在python 2.7和3.x中都有效:
from .geometry import *
注意“。”在模块名称前面。
答案 1 :(得分:1)
Python 3 doesn't do implicit relative imports any more。
这意味着您需要在geometry
中导入svg.py
显式相对导入,或better yet,将其更改为绝对导入:
from svg.geometry import *
正如@CJlano指出的那样,它还需要from __future__ import absolute_import
才能在Python 2上运行。