为什么 re 模块试图导入 enum.IntFlag?
Why is the re module trying to import 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'
运行一个依赖程序(pip)
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 解释器设置也会产生上述回溯(在 window 中,解释器设置将在)。
Preferences =:> PyDev =:> Interpreters =:> Python Interpreter
此外,文本编辑器无法识别打印语句。
此外,当我 运行 控制台解释器时(例如:Ctrl+Alt+Enter
,eclipse 失败并弹出一个显示:
'Create Interactive Console' has encountered a problem.
Error initializing console.
Error Details
单击错误详细信息按钮:
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
。此外,它是一个包 init 而不是单个文件。
没有/usr/lib/python3.6/site-packages/enum/enum.py
。有一个 README
文件说这是版本 3.4。
我可以用 enum.py
替换 __init__.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
感谢您的帮助! :)
您应该检查您的 python 路径上是否有另一个名为 enum
的模块正在隐藏 stdlib enum
模块。为此,您可以这样做:
import enum
print(enum.__file__)
如果它与 python3
stdlib 模块路径不匹配,您应该尝试将其删除。理想情况下,您应该使用系统使用的任何包管理器来卸载它,因为它可能是其他包的依赖项。但如果这不可能,您可以尝试手动删除它。
核心模块从另一个核心模块导入不存在的名称怎么可能?
具体来说,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'
运行一个依赖程序(pip)
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 解释器设置也会产生上述回溯(在 window 中,解释器设置将在)。
Preferences =:> PyDev =:> Interpreters =:> Python Interpreter
此外,文本编辑器无法识别打印语句。
此外,当我 运行 控制台解释器时(例如:Ctrl+Alt+Enter
,eclipse 失败并弹出一个显示:
'Create Interactive Console' has encountered a problem.
Error initializing console.
Error Details
单击错误详细信息按钮:
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
。此外,它是一个包 init 而不是单个文件。
没有/usr/lib/python3.6/site-packages/enum/enum.py
。有一个 README
文件说这是版本 3.4。
我可以用 enum.py
__init__.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
感谢您的帮助! :)
您应该检查您的 python 路径上是否有另一个名为 enum
的模块正在隐藏 stdlib enum
模块。为此,您可以这样做:
import enum
print(enum.__file__)
如果它与 python3
stdlib 模块路径不匹配,您应该尝试将其删除。理想情况下,您应该使用系统使用的任何包管理器来卸载它,因为它可能是其他包的依赖项。但如果这不可能,您可以尝试手动删除它。