簡體   English   中英

為什么 Python 3.6.1 拋出 AttributeError: module 'enum' has no attribute 'IntFlag'?

[英]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 標准環境項目時出現此錯誤而來到這里,那么您需要做的就是

  • 確保要運行的配置是針對 Flask 的,而不是 Google App Engine 配置。
  • 然后在 Preferences >> Languages & Framework >> Google App Engine 下禁用 Google App Engine 支持

原因是根據這個鏈接

總體目標是您的應用程序應該是完全可移植的,並且可以在任何標准 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。

來源: https : //github.com/python-poetry/poetry/issues/1122

在 pycharm 首選項中禁用“Google App Engine Support”為我解決了這個問題。

pycharm 應用引擎首選項

我在從 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-sdkpip 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"

如果在PyCharm運行測試時遇到此問題,請確保在配置取消選中第二個框

我的計算機上安裝了 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

不幸的是,這些建議都沒有幫助我,但是經過更多的谷歌搜索之后

pip install aenum

為我解決了

確保您的代碼庫中沒有名為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM