python3包模块与标准modu冲突

2024-04-26 06:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近决定升级到python3,并开始转换我的一些脚本。我在使用名为io的模块的脚本中遇到了一个问题-在python2中,这是非常好的,但是在python3中,io是文件的标准模块。我发现this old question是关于同一类问题的,但是这似乎是在引用python2。我有一个相反的问题-给定两个文件,main.py和{},main.py中的import io将导入标准的io模块,而不是本地模块。from __future__ import absolute_imports没有帮助,from . import io和相关的尝试如预期失败(我从未理解过,python真的不知道顶级包在哪里?)。重命名显然是一个解决办法,但如果可能的话,我想避免它。有没有一些python3标准的方法来解决模块名冲突?在


Tags: 模块文件frompyioimport脚本标准
1条回答
网友
1楼 · 发布于 2024-04-26 06:20:36

这是我的回答:-在

我的目录结构:-在

calvin$ tree /Users/calvin/work/learn3/
/Users/calvin/work/learn3/
└── myspecialpackage
    ├── __init__.py
    ├── __init__.pyc
    ├── io.py
    ├── io.pyc
    └── main.py

__init__.py是一个空文件。在

io.py是与python3的io模块冲突的自定义模块。在

main.py包含这一组示例代码:-在

^{pr2}$

导入的io模块将是io.py中的模块,而不是python3的模块。在

另外,使用这种方法可以让我们拥有您的定制io.py以及python3的io模块(如果您希望得到您的蛋糕并吃掉它;-)。您可以消除名称空间io的使用冲突这:在

from myspecialpackage import io as my_special_io
print(my_special_io.__file__)

import io
print(io.__file__)

运行main.py将得到你:-在

In [3]: run myspecialpackage/main.py
/Users/calvin/work/learn3/myspecialpackage
./myspecialpackage/io.py
/Users/calvin/.virtualenvs/learn3/bin/../lib/python3.3/io.py

请注意我在上面就

our_package_root = os.path.dirname(os.path.realpath(__file__))
sys.path.append(our_package_root)

相关问题 更多 >