在python中使用absolute_import并处理相对模块名称冲突
发布时间:2020-12-16 23:10:19 所属栏目:Python 来源:网络整理
导读:我真的希望这是一个简单的例子,让我想念复杂的 Python2导入机制.我有以下设置: $ ls -ltr pypackage1 total 3-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 io.py-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 __init__.py-rw-r--r-- 1 pelson pelson 57 Aug 17
我真的希望这是一个简单的例子,让我想念复杂的
Python2导入机制.我有以下设置:
$> ls -ltr pypackage1 total 3 -rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 io.py -rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 __init__.py -rw-r--r-- 1 pelson pelson 57 Aug 17 19:22 code.py $> cat pypackage1/code.py from __future__ import absolute_import import zipfile 即我只有一个带有空__init__.py和io.py的存根包,以及一个2行的code.py文件. 我可以导入pypackage1: $> python -c "import pypackage1.code" 但是我无法运行code.py文件: $> python pypackage1/code.py Traceback (most recent call last): File "pypackage1/code.py",line 3,in <module> import zipfile File "python2.7/zipfile.py",line 462,in <module> class ZipExtFile(io.BufferedIOBase): AttributeError: 'module' object has no attribute 'BufferedIOBase' 显然问题与zipfile模块在内置io模块上拾取我的相对io模块有关,但我认为我的__future__ import absolute_import会修复它. 在此先感谢您的帮助, 解决方法
这是正确的行为.如果要修复错误,只需不要从包内运行.
当您运行包内的脚本时,python不会将该目录解释为包,从而将工作目录添加到PYTHONPATH. 我建议在你的包之外(或在bin / scripts文件夹中)创建一个简单的启动器脚本,并启动它.此脚本可以包含以下内容: from pypackage1 import code code.main() 另一种方法是告诉python解释器您要执行的文件是模块的一部分.您可以使用-m命令行选项执行此操作.在您的情况下,您将不得不这样做: python -m pypackage1.code 请注意,-m的参数应该是模块名称,而不是文件名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Python批量创建迅雷任务及创建多个文件
- python – 神秘的GObject警告:断言`G_IS_OBJECT(object)’
- 使用SWIG为python2和python3创建模块
- 关于Python中浮点数精度处理的技巧总结
- Python:如何在python 2.6中创建一个包含text和variable值的
- python – 组合三个正则表达式
- 在Python 2.7.3中为numpy数组指定字段名称
- `with canvas:`(Python`with something()as x:`)如何隐式
- python – 美丽的汤打开所有带有pid的网址
- python – websocket.recv()永远不会在另一个事件循环中返回