![](/img/trans.png)
[英]AttributeError: module 'enum' has no attribute 'IntFlag' in Pycharm
[英]Why Python 3.6.1 throws AttributeError: module 'enum' has no attribute 'IntFlag'?
我剛剛為 MacOS X 安裝了 Python 3.6.1
當我嘗試運行控制台(或使用 Python3 運行任何東西)時,會拋出此錯誤:
AttributeError: module 'enum' has no attribute 'IntFlag'
$ /Library/Frameworks/Python.framework/Versions/3.6/bin/python3
Failed to import the site module
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 544, in <module>
main()
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 530, in main
known_paths = addusersitepackages(known_paths)
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 282, in addusersitepackages
user_site = getusersitepackages()
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 258, in getusersitepackages
user_base = getuserbase() # this will also set USER_BASE
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 248, in getuserbase
USER_BASE = get_config_var('userbase')
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/sysconfig.py", line 601, in get_config_var
return get_config_vars().get(name)
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/sysconfig.py", line 580, in get_config_vars
import _osx_support
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/_osx_support.py", line 4, in <module>
import re
File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/re.py", line 142, in <module>
class RegexFlag(enum.IntFlag):
AttributeError: module 'enum' has no attribute 'IntFlag'
類 IntFlag 存在於 enum.py 中。 那么,為什么會拋出 AttributeError 呢?
這是因為您的enum
不是標准庫enum
模塊。 您可能安裝了enum34
包。
檢查是否是這種情況的一種方法是檢查屬性enum.__file__
import enum
print(enum.__file__)
# standard library location should be something like
# /usr/local/lib/python3.6/enum.py
從 python 3.6 開始, enum34 庫不再與標准庫兼容。 該庫也是不必要的,因此您只需將其卸載即可。
pip uninstall -y enum34
如果您需要代碼在 <=3.4 和 >3.4 的 python 版本上運行,您可以嘗試將enum-compat
作為要求。 它只為沒有標准庫 enum 的舊版本 python 安裝enum34
。
不知道你是否還有這個問題。 我有一個類似的問題,我可以通過取消設置PYTHONPATH
來解決它
$ unset PYTHONPATH
對我來說,在安裝 gcloud 組件 app-engine-python 以集成到 pycharm 后發生此錯誤。 卸載模塊有幫助,即使 pycharm 現在沒有上傳到 app-engine。
如果有人因為在 PyCharm 中運行谷歌應用引擎 Python 3.7 標准環境項目時出現此錯誤而來到這里,那么您需要做的就是
原因是根據這個鏈接
總體目標是您的應用程序應該是完全可移植的,並且可以在任何標准 Python 環境中運行。 您編寫的是標准 Python 應用程序,而不是 App Engine Python 應用程序。 作為這一轉變的一部分,您不再需要為應用的核心功能使用專有的 App Engine API 和服務。 目前,App Engine API 在 Python 3.7 運行時中不可用。
我想當我們在 PyCharm 中創建一個 python 3.7 項目作為 Google 應用程序引擎項目時,它仍然嘗試以與 python2.7 應用程序相同的方式執行
免責聲明: @juanpa.arrivillaga,如果你看到這個答案,請隨意寫下你自己的,我會刪除這篇文章。
@juanpa.arrivillaga 上面提到過:
您的工作目錄中是否有文件名 enum.py ?
這是我遇到的問題。 我當時不知道 python 上的 enum 模塊,並命名了我的測試文件enum.py
。
由於文件名是模塊名,因此存在沖突。 關於模塊的更多信息: https : //docs.python.org/2/tutorial/modules.html
安裝 enum34 的 1.1.8 版對我有用。
我能夠通過將 enum34 = "==1.1.8" 添加到 pyproject.toml 來解決這個問題。 顯然 enum34 在 v1.1.8 中有一個功能可以避免這個錯誤,但這在 v1.1.9+ 中倒退了。 不過,這只是一種解決方法。 更好的解決方案是讓包使用環境標記,因此除非需要,否則您根本不必安裝 enum34。
在 pycharm 首選項中禁用“Google App Engine Support”為我解決了這個問題。
我在從 HuggingFace 安裝transformers
庫時遇到了這個問題。 這是因為包enum34
安裝在我的環境中,它覆蓋了 Python 中的內置枚舉。 這個包可能是由某些東西安裝的,因為 Python 3.6+ 不再需要向前兼容性。 所以解決辦法很簡單,
pip uninstall -y enum34
Håken Lid 的回答幫助解決了我的問題(謝謝!),在我的情況下,Python3.7 在 Docker 容器中運行 Flask( FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
)。
就我而言, enum34
是由另一個庫( pip install smartsheet-python-sdk
) pip install smartsheet-python-sdk
。 對於那些遇到類似 Docker 容器問題的人,這是我的最終 Dockerfile(剝離到相關行):
FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
...
RUN pip install -r requirements.txt
RUN pip uninstall -y enum34
...
如果您必須為 python2 和 python3 保留 PYTHONPATH,您可以編寫別名語句來在您的 bash_profile 中設置正確的 PYTHONPATH:
在 ~/.bash_profile 中硬編碼 PYTHONPATH2 和 PYTHONPATH3 變量,並在其末尾添加以下別名:
alias python='export PYTHONPATH=${PYTHONPATH2};python'
alias python3='export PYTHONPATH=${PYTHONPATH3};python3'
我的python
(指的是python2),因為我更頻繁地使用python2。
當我遇到這個問題時:
AttributeError: 模塊“enum”沒有屬性“IntFlag”
首先我運行命令:
unset PYTHONPATH
然后運行我想要的命令,然后就成功了。
我使用pip install <required-library> --ignore-installed enum34
安裝所需的庫后,請在構建期間查找警告。 我收到這樣的錯誤:
Using legacy setup.py install for future, since package 'wheel' is not installed
ERROR: pyejabberd 0.2.11 has requirement enum34==1.1.2, but you'll have enum34 1.1.10 which is incompatible.
要解決這個問題,現在運行命令: pip freeze | grep enum34
pip freeze | grep enum34
。 這將為您提供已安裝 enum34 的版本。 現在通過pip uninstall enum34
卸載它並重新安裝所需的版本pip install "enum34==1.1.20"
我的計算機上安裝了 Python 2 和 Python 3。 出於某種奇怪的原因,當調用 re 模塊時,我在 Python 3 的 sys.path 中還有一個到 Python2 的 sitepackage 庫目錄的路徑。 如果我運行 Python 3 並導入 enum 和print(enum.__file__)
系統不會顯示此 Python 2 站點包路徑。 所以一個非常粗糙和骯臟的黑客是,直接修改導入 enum 的模塊(遵循回溯路徑)並在導入 enum 之前插入以下代碼:
import sys
for i, p in enumerate(sys.path):
if "python27" in p.lower() or "python2.7" in p.lower(): sys.path.pop(i)
import enum
那解決了我的問題。
我嘗試了pip uninstall enum
,但它對我不起作用。 我使用conda,還有其他依賴項。 實際上,我僅使用所需的軟件包(及其依賴項)創建了一個新的虛擬環境。 然后,我在這里安裝了安裝程序。 有效。 這是在窗戶上。
即使我在運行時遇到了這個問題 python -m grpc_tools.protoc --version 不得不設置 PYTHONPATH 直到站點包並關閉所有命令提示符窗口並且它工作。 希望對 gRPC 用戶有所幫助。
我在使用 python3.8 和 tensorflow 2.2.0 的虛擬環境內核的 jupyterlab 中的 ubuntu20.04 中遇到了這個問題。 錯誤信息是
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel_launcher.py", line 15, in <module>
from ipykernel import kernelapp as app
File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel/__init__.py", line 2, in <module>
from .connect import *
File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel/connect.py", line 13, in <module>
from IPython.core.profiledir import ProfileDir
File "/home/hu-mka/.local/lib/python2.7/site-packages/IPython/__init__.py", line 48, in <module>
from .core.application import Application
File "/home/hu-mka/.local/lib/python2.7/site-packages/IPython/core/application.py", line 23, in <module>
from traitlets.config.application import Application, catch_config_error
File "/home/hu-mka/.local/lib/python2.7/site-packages/traitlets/__init__.py", line 1, in <module>
from .traitlets import *
File "/home/hu-mka/.local/lib/python2.7/site-packages/traitlets/traitlets.py", line 49, in <module>
import enum
ImportError: No module named enum
問題是 /usr/bin/python 中的符號鏈接指向 python2。 解決方案:
cd /usr/bin/
sudo ln -sf python3 python
希望 Python 2 的使用將很快完全減少。
我遇到了同樣的問題,但我無法更改腳本在其中運行的環境。 所以這里的修復不適用於我。
我所做的是
import os
import sys
os.environ["PYTHONPATH"] = os.pathsep.join(
(p for p in os.environ["PYTHONPATH"].split(os.pathsep) if "python2" not in p)
)
sys.path = [p for p in sys.path if "python2" not in p]
# Now that the paths are clean, we can import re
import re
確保您的代碼庫中沒有名為 enum 的文件或文件夾
如果有人在嘗試從 virtualenv 運行 Jupyter 內核時遇到此問題,只需將正確的PYTHONPATH
添加到 virtualenv 內核的kernel.json
(例如 Python 3):
{
"argv": [
"/usr/local/Cellar/python/3.6.5/bin/python3.6",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3 (TensorFlow)",
"language": "python",
"env": {
"PYTHONPATH": "/Users/dimitrijer/git/mlai/.venv/lib/python3.6:/Users/dimitrijer/git/mlai/.venv/lib/python3.6/lib-dynload:/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6:/Users/dimitrijer/git/mlai/.venv/lib/python3.6/site-packages"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.