首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包中使用python模块

在包中使用python模块
EN

Stack Overflow用户
提问于 2014-01-06 21:42:45
回答 2查看 690关注 0票数 0

我在代码中使用python模块/包时遇到了一些困难。代码在这里:https://github.com/cjlano/svg

代码语言:javascript
复制
.
└── 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中失败:

代码语言:javascript
复制
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模块文档。鉴于

代码语言:javascript
复制
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中使用有什么想法吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-06 22:01:43

Python3 不再进行隐式相对导入

这意味着您需要将geometrysvg.py中的导入变为显式的相对导入,或者更好将其更改为绝对导入:

代码语言:javascript
复制
from svg.geometry import *

正如@CJlano所指出的,这还需要from __future__ import absolute_import才能在Python2上工作。

票数 1
EN

Stack Overflow用户

发布于 2014-01-06 21:59:06

如果在svg.py中使用相对导入,它将在python2.7和3.x中运行。

代码语言:javascript
复制
from .geometry import *

注意“。”在模块名前面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20959811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档