为什么re模块试图导入enum.IntFlag?

反转

核心模块如何从另一个核心模块导入不存在的名称?

具体来说,re模块导入enum.IntFlag


繁殖方式

可以通过启动解释器并尝试导入,运行依赖于以下程序的程序来重现它,enum.IntFlag例如pip,使用文本编辑器在Eclipse中查看解释器设置页面,使用文本编辑器,在PyDev中运行交互式控制台,...

直接导入

from enum import IntFlag

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'IntFlag'

运行一个依赖程序(点子)

Traceback (most recent call last):
  File "/usr/bin/pip", line 4, in <module>
    import re
  File "/usr/lib/python3.6/re.py", line 142, in <module>
    class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'

在Eclipse中查看Python Interpreter设置也会产生上述回溯(在解释器设置所在的窗口中)。

Preferences =:> PyDev =:> Interpreters =:> Python Interpreter

此外,文本编辑器无法识别打印语句。

另外,当我运行控制台解释器时(例如:Ctrl+Alt+Enter,eclipse失败,并显示以下弹出窗口:

“创建交互式控制台”遇到问题。

初始化控制台时出错。

错误详情

单击错误详细信息按钮:

Error initializing console.
Unexpected error connecting to console.
Failed to recive suitable Hello response from pydevconsole. Last msg received: Console already exited with value: 1 while waiting for an answer.

Command Line used:  /usr/bin/python3.6 -u /usr/lib/eclipse/../../../home/scott/.eclipse/org.eclipse.platform_4.7.1_155965261_linux_gtk_x86_64/plugins/org.python.pydev_6.2.0.201711281614/pysrc/pydevconsole.py 44633 43575 44633 43575

Environment:
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/opt/cuda/bin:/usr/lib/jvm/default/bin:/opt/jython/bin/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
XAUTHORITY=/tmp/xauth-1000-_0
XDG_DATA_DIRS=/usr/share:/usr/share:/usr/local/share
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_CURRENT_DESKTOP=KDE
QT_AUTO_SCREEN_SCALE_FACTOR=0
MAIL=/var/spool/mail/scott
MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins
QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1
SESSION_MANAGER=local/scott-pc:@/tmp/.ICE-unix/976,unix/scott-pc:/tmp/.ICE-unix/976
LOGNAME=scott
PAM_KWALLET5_LOGIN=/run/user/1000/kwallet5.socket
PWD=/home/scott
XCURSOR_THEME=Azenis
PYPATH=/code/scott/Py/Path
PYTHONPATH=/home/scott/.eclipse/org.eclipse.platform_4.7.1_155965261_linux_gtk_x86_64/plugins/org.python.pydev_6.2.0.201711281614/pysrc/pydev_sitecustomize:/mnt/ssdata/scott/code/Py/Path:/home/scott:/usr/lib/python3.6/Tools/scripts:/usr/lib/python3.6/lib-dynload:/usr/lib/python3.6/site-packages:/usr/lib/python3.6
KDE_SESSION_VERSION=5
SHELL=/bin/bash
KDE_MULTIHEAD=false
KDE_FULL_SESSION=true
GTK_MODULES=canberra-gtk-module
GDK_SCALE=1
DATA=/data/scott/
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
PYDYNLOAD=/usr/lib/python3.6/lib-dynload
VM=/vm/scott/
XDG_SESSION_DESKTOP=KDE
SHLVL=1
PYSITE=/usr/lib/python3.6/site-packages
OXYGEN_DISABLE_INNER_SHADOWS_HACK=1
PYVER=3.6
KDE_SESSION_UID=1000
XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
LANG=en_GB.UTF-8
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_ID=c2
XDG_SESSION_TYPE=x11
DISPLAY=:0
PYTHONSTARTUP=/usr/lib/python3.6/startup_hook.py
GTK_RC_FILES=/etc/gtk/gtkrc:/home/scott/.gtkrc:/home/scott/.config/gtkrc
ECLIPSE_HOME=/usr/lib/eclipse
XDG_SESSION_CLASS=user
XCURSOR_SIZE=56
LIBOVERLAY_SCROLLBAR=0
DESKTOP_SESSION=/usr/share/xsessions/plasma
GDK_CORE_DEVICE_EVENTS=1
USER=scott
GTK2_RC_FILES=/etc/gtk-2.0/gtkrc:/home/scott/.gtkrc-2.0:/home/scott/.config/gtkrc-2.0
XDG_SEAT=seat0
CODE=/code/scott/
GS_LIB=/home/scott/.fonts
PYSCRIPTS=/usr/lib/python3.6/Tools/scripts
NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
XDG_VTNR=1
XDG_RUNTIME_DIR=/run/user/1000
HOME=/home/scott
PYTHONIOENCODING=UTF-8
PYDEV_UMD_ENABLED=true
PYDEV_UMD_NAMELIST=guidata,guiqwt
PYDEV_UMD_VERBOSE=true

进展

在标准库版本中/usr/lib/python3.6/enum.py,名称enum.IntFlag存在于enum.__all__

enum从标准库版本导入的吗?

import enum
print(enum.__file__)
# /usr/lib/python3.6/site-packages/enum/__init__.py

它是从/usr/lib/python3.6/site-packages/enum/__init__.py我检查的那个文件导入的,没有IntFlag另外,它是一个包初始化而不是单个文件。

没有/usr/lib/python3.6/site-packages/enum/enum.py有一个README文件说这是版本3.4。

我可以更换的内容__init__.pyenum.py

我可以删除site-packages/enum目录


还有另一个enum模块python3.4兼容性软件包,该模块掩盖了标准库中的模块版本。

python34兼容性软件包: /usr/lib/python3.6/enum/__init__.py

标准库模块:/usr/lib/python3.6/enum.py

我删除了目录:

mkdir enumbackup
cd enumbackup
sudo mv /usr/lib/python3.6/enum .
sudo mv /usr/lib/python3.6/enumenum34-1.1.6.dist-info .

现在,enum.__file__按需显示/usr/lib/python3.6/enum.py,一切正常。

from enum import IntFlag
## works

谢谢您的帮助!:)

ekhumoro

您应该检查enum一下python路径上是否有另一个模块遮盖了stdlibenum模块。为此,您可以执行以下操作:

import enum
print(enum.__file__)

如果与python3 stdlib模块路径不匹配,则应尝试将其删除。理想情况下,您应该使用系统使用的任何软件包管理器来卸载它,因为它可能是某些其他软件包的依赖项。但是,如果那不可能,您可以尝试手动将其删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

修改enum.IntFlag __repr__

AttributeError:模块'enum'没有属性'IntFlag'-Fastai安装

SQLAlchemy安装失败,模块“枚举”没有属性“ IntFlag”

使用python3.6创建virtualenv时,模块'enum'没有属性'IntFlag'吗?

将字符串列表转换为IntFlag

将组合的IntFlag分解为其单独的标志

为什么python3.4试图从python2.7导入模块

pip install枚举不起作用,显示“ intflag”错误没有

为什么从模块导入功能会导入整个模块?

为什么我不能导入模块?

为什么要从删除的路径导入模块?

无法使用 PyCharm 导入模块,为什么?

为什么共享模块导入失败?

Javascript模块导入失败-为什么?

为什么导入模块会导致循环导入错误

当未定义默认导出时,“模块”中的导入模块会导入什么?为什么它与作为模块导入*不同?

为什么已经导入模块时需要显式导入模块?

Python / Django:为什么在使用模块之前立即导入模块会阻止循环导入?

为什么在“导入模块”和“从模块导入*”中,全局变量的行为不同?

为什么子模块的代码尝试直接或通过相对导入来导入同级子模块?

为什么Python会选择这个意外的模块来导入

为什么必须将SharedModule导入到根模块?

在python中,为什么要从内置模块导入“对象”?

为什么导入错误:没有名为lightgbm的模块

为什么模块导入实际上不存在?

为什么我不能导入上层模块或函数?

为什么延迟加载的模块必须导入commonModule?角度2

从模块导入的全局变量不会更新-为什么?

为什么从模块导入*中使用坏习惯?