Python 3.6.1 neden AttributeError atıyor: 'enum' modülünün 'IntFlag' özniteliği yok?


119

MacOS X için Python 3.6.1'i yeni yükledim

Konsolu çalıştırmayı (veya Python3 ile herhangi bir şeyi çalıştırmayı) denediğimde şu hata atılıyor:

  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 sınıfı enum.py içinde bulunmaktadır. Öyleyse, AttributeError neden atılıyor?


8
enum.pyÇalışma dizininizde şans eseri bir dosya adı var mı ?
juanpa.arrivillaga

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 $ PATH içinde
BryanWheelock

2
... istediğim bu değildi. Ben sordum adında bir dosya vardı * enum.pysenin içinde çalışma dizini
juanpa.arrivillaga

4
Aslında öyleydi. "Kabuk yapılandırma dosyalarınızın hiçbir yerinde, PYTHONPATH'ın Python 2.7 kurulumunuzu gösterecek şekilde ayarlanmadığından emin olun." Bu çok iyi bir şekilde buna neden olabilir.
juanpa.arrivillaga

2
Yorumlayıcıyı -Isite paketlerini ve ortam değişkenini yok sayma seçeneğiyle ve / veya -vithalatlarla ilgili ayrıntılı mesajları görme seçeneğiyle çalıştırmayı deneyin
Ceppo93

Yanıtlar:


230

Bunun nedeni enum, standart kitaplık enummodülünüzün olmamasıdır . Muhtemelen paket sendeenum34 yüklediniz.

Durumun böyle olup olmadığını kontrol etmenin bir yolu mülkü incelemektir. enum.__file__

import enum
print(enum.__file__)  
# standard library location should be something like 
# /usr/local/lib/python3.6/enum.py

Python 3.6'dan beri, enum34 kitaplığı artık standart kitaplıkla uyumlu değildir. Kitaplık da gereksizdir, bu nedenle onu kaldırabilirsiniz.

pip uninstall -y enum34

Hem <= 3.4 hem de> 3.4 python sürümlerinde çalıştırmak için koda ihtiyacınız varsa enum-compat, bir gereksinim olarak kullanmayı deneyebilirsiniz . Yalnızca enum34standart kitaplık listesi olmadan eski python sürümleri için yükler .


Bu öldürür ipython2 --> traitlets --> enum34. (Maalesef enum34yüklü .../2.7/site-packages/enumdeğil .../2.7/site-packages/enum34- sorun istemiyor.)
denis

1
evet haklısın - bu sadece ikisini de kullanmaya çalışanlara bir not.
denis

9
Benim durumumda bana verdi Skipping enum34 as it is not installed.. 3.7
Rotkiv

1
Ya print(enum.__file__)bana bu verir: /usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/enum.py. Bu benim standart bir enum kütüphanem olduğu ve olmadığı anlamına mı geliyor enum34? Düzenleme: evet, pip uninstall enum34bana verdiSkipping enum34 as it is not installed.
Andrey

1
@ HåkenLid Bu arada a'yı açmaya çalıştığımda oluyor jupyter notebook.
Cynthia GS

89

Hala bu sorunu yaşayıp yaşamadığınızdan emin değilim. Ben de benzer bir sorun yaşadım ve sorunu basitçe çözerek çözebildimPYTHONPATH

$ unset PYTHONPATH


2
Sadece PyCharm kullanıcıları için FYI, tıkladığım PYTHONPATH'ı kaldırmak için Settings->Build, Execution, Deployment->Console->Python Console. Daha sonra PYTHONPATH değişkenini başlıklı alandan kaldırdım Environment variables. Not: Bu yazının yazıldığı sırada PyCharm 2017.1.2 kullanıyordum.
MikeyE

Bu işe yarıyor, ancak Python 2 kitaplıklarımı içeren hiçbir yol kombinasyonu olmadan onu çalıştırabilirim. Nedenini bilmek isterim.
Ulf Aslak

Evet, pencereler, ben yeniden benim cmd istemi, İşe yaradı, belki dolaylı o PYTHONPATH reset
Karan Kaw

12

Benim için bu hata, pycharm'a entegre etmek için gcloud bileşeni app-engine-python'u yükledikten sonra oluştu. Modülün kaldırılması, pycharm artık uygulama motoruna yüklenmiyor olsa bile yardımcı oldu.


4
PyCharm altında Flask çalıştırırken bu hatayı aldım ve projeden AppEngine desteğini devre dışı bırakarak düzeltdim (Tercihler -> Diller ve Çerçeveler -> Google App Engine). Python3 için 2. nesil çalışma zamanı, uygulama motoru geliştirme sunucusunu kullanmaz, bu nedenle bu mantıklıdır (Python 2.x için).
Brett

9

PyCharm'da bir google uygulama motoru Python 3.7 standart ortam projesi çalıştırırken bu hatayı aldığı için buraya gelen biri varsa, yapmanız gereken tek şey

  • Çalıştırılacak yapılandırmanın Google App Engine yapılandırması için değil Flask için olduğundan emin olun.
  • Ardından Tercihler >> Diller ve Çerçeve >> Google App Engine altında Google App Engine desteğini devre dışı bırakın

Nedeni bu bağlantıya göre

Genel amaç, uygulamanızın tamamen taşınabilir olması ve herhangi bir standart Python ortamında çalışması gerektiğidir. Standart bir Python uygulaması yazarsınız, bir App Engine Python uygulaması değil. Bu değişimin bir parçası olarak, artık uygulamanızın temel işlevi için özel App Engine API'lerini ve hizmetlerini kullanmanız gerekmiyor. Şu anda App Engine API'leri Python 3.7 çalışma zamanında kullanılamamaktadır.

Sanırım PyCharm'da bir Google uygulama motoru projesi olarak bir python 3.7 projesi oluşturduğumuzda, yine de bir python2.7 uygulaması için yaptığı gibi yapmaya çalışıyor


Öyleyse, Pycharm'dan Google App Engine için yazarken, kodu buluta manuel olarak mı yüklenmeli yoksa Pycharm yine de App Engine'e yükleyebilecek mi?
Ben

@Ben Kodu buluta (Google App Engine) manuel olarak yükleyerek ne demek istediğinizden emin değilim. App Engine'e dağıtmaktan bahsediyorsanız, onun komutu kullanarak gcloud app deploy. Bunun pycharm ile ilgisi yok.
Joseph Abraham

Bu konuda sadece bir amatörüm ancak Pycharm'da App Engine desteğini etkinleştirmenin size kodunuzu dağıtmak için bir menü komutu kullanma yeteneği verdiğini düşündüm. Ancak Pycharm'da uygulama motoru desteğini devre dışı bıraktığınızda (yani Python 3.7 kullanmak için), kodunuzu dağıtmak için komut satırına gitmeniz gerekir. Bu hakkım var mı yoksa uygulama motoru öğelerinin 2.7 altında nasıl çalıştığını yanlış mı yorumladım?
Ben

@Ben Bunun nedeni Pycharm uygulama motoru destek araçlarının Python 2.7 için hedeflenmiş olmasıdır. Cevabımda bahsettiğim gibi Google, Python 3.7 Standart Uygulama motoru uygulamalarını standart Python Uygulaması olarak görüyor. Pycharm'ın da Python 3.7 uygulama motoru uygulamaları için bu şekilde davranmasının sebebinin bu olduğuna inanıyorum.
Joseph Abraham

8

SORUMLULUK REDDİ: Lütfen, @ juanpa.arrivillaga, bu yanıtı görürseniz, kendinizinkini yazmaktan çekinmeyin ve bu gönderiyi kaldıracağım.

@ juanpa.arrivillaga yukarıda bahsetmişti :

Çalışma dizininizde enum.py dosya adı var mı?

Karşılaştığım sorun buydu. O sırada python'daki enum modülünün farkında değildim ve test dosyama isim vermiştim enum.py.

Dosya adı yana olan modül adı, bir çakışma oldu. Modüller hakkında daha fazla bilgiyi burada bulabilirsiniz: https://docs.python.org/2/tutorial/modules.html


Hayatımı kurtardın.
Gastón

6

Pycharm tercihlerinde "Google App Engine Desteği" ni devre dışı bırakmak benim için bu sorunu çözdü.

pycharm uygulama motoru tercihleri


Benim için çalışıyor. Flask'ı PyCharm'dan hata ayıklama modunda çalıştırırken aynı sorunu yaşadım
Khanh Hua

Bu benim için çalışıyor. Çünkü aslında google sdk python2 kullanıyor. ...
Jose Mar

3

Håken Lid'in cevabı sorunumu çözmemize yardımcı oldu (teşekkürler!), Benim durumumda Python3.7'de Flask'ı Docker konteynerinde ( FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7) çalıştıran mevcut .

Benim durumumda, enum34başka bir kitaplık ( pip install smartsheet-python-sdk) tarafından kuruluyordu . Benzer bir Docker konteyner problemi ile gelenler için işte benim son Dockerfile'ım (ilgili satırlara çıkarılmış):

FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
...
RUN pip install -r requirements.txt
RUN pip uninstall -y enum34
...

2

Hem python2 hem de python3 için PYTHONPATH tutmanız gerekiyorsa, bash_profile dosyanızda uygun PYTHONPATH'ı ayarlamak için takma ad ifadeleri yazabilirsiniz:

PYTHONPATH2 ve PYTHONPATH3 değişkenlerinizi ~ / .bash_profile dosyanıza sabit kodlayın ve sonuna aşağıdaki takma adları ekleyin:

alias python='export PYTHONPATH=${PYTHONPATH2};python'
alias python3='export PYTHONPATH=${PYTHONPATH3};python3'

Benim pythondaha sık python2 kullandıkça (python2 ifade eder).


Bu öneri çalışmıyor; hala aynı hatayı alıyorum.
Derek

2

Ne zaman bu sorunu yaşıyorum:

AttributeError: 'enum' modülünün 'IntFlag' özniteliği yok

basitçe önce şu komutu çalıştırıyorum:

unset PYTHONPATH 

ve sonra istediğim komutu çalıştırdıktan sonra bunda başarılı oldum.


1
bu böyledir çünkü PYTHONPATH'ınız benim durumumda olduğu gibi python'un eski sürümüne ait şeyleri işaret ediyor olmalıdır. İşe yaradı
nish

Benim durumumda eski VENV. Bahşiş için
teşekkürler

2

Enum34 1.1.8 sürümünü yüklemek benim için çalıştı.

Bunu pyproject.toml'ye enum34 = "== 1.1.8" ekleyerek çözebildim. Görünüşe göre enum34, v1.1.8'de bu hatayı önleyen bir özelliğe sahipti, ancak bu v1.1.9 + sürümünde geriledi. Bu sadece bir geçici çözümdür. Daha iyi çözüm, paketlerin ortam belirteçlerini kullanmasıdır, böylece gerekmedikçe enum34'ü yüklemenize gerek kalmaz.

Kaynak: https://github.com/python-poetry/poetry/issues/1122


1
Bu çözüm benim için çalıştı
Ajith

1
Bu çözüm, kullanmaya çalışırken benim için çalıştı pyinstaller.
Jack Hales

2

Kullanarak yaptım pip install <required-library> --ignore-installed enum34
Gerekli kitaplığınız yüklendikten sonra, oluşturma sırasında uyarıları arayın. Bunun gibi bir Hata aldım:
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.

Bu sorunu gidermek için şimdi komutunu çalıştırın: pip freeze | grep enum34. Bu size kurulu enum34'ün sürümünü verecektir. Şimdi tarafından kaldırın pip uninstall enum34ve gerekli sürümü şu şekilde yeniden yükleyin:
pip install "enum34==1.1.20"


1

Bilgisayarımda Python 2 ve Python 3 yüklü. Garip bir nedenden ötürü, Python 3'ün sys.path'ında, re modül çağrıldığında Python2'nin site paketi kitaplığı dizinine giden bir yol da var. Python 3 çalıştırır ve numaralandırmayı içe aktarırsam ve print(enum.__file__)sistem site paketlerine giden bu Python 2 yolunu göstermez. Bu nedenle, enumun içe aktarıldığı modülü doğrudan değiştirmek (izleme yollarını izleyin) ve numaralandırmayı içe aktarmadan hemen önce aşağıdaki kodu eklemek çok kaba ve kirli bir hacklemedir:

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

Bu benim sorunumu çözdü.


0

Python -m grpc_tools.protoc --version çalıştırırken bile bu sorunu yaşadım. Site paketlerine kadar PYTHONPATH'ı ayarlamalı ve tüm komut istemi pencerelerini kapatmalıydım ve işe yaradı. Umarım gRPC kullanıcıları için yardımcı olur.


0

Bu problemi python3.8 ve tensorflow 2.2.0 ile sanal ortam çekirdeğimdeki jupyterlab'de ubuntu20.04'te yaşadım. Hata mesajı

 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

problem, / usr / bin / python'daki sembolik bağlantıda python2'yi gösteriyordu. Çözüm:

cd /usr/bin/
sudo ln -sf python3 python

Umarım python2 yakında ölecektir! Terveisin, Markus


Bu çözüm, sisteminizde korkunç bir karmaşa yaratabilir! Tüm sistem için varsayılan python'u değiştirmek yerine virtualenv kullanmalısınız.
Alex Baranowski

Bunu belirttiğiniz için teşekkürler. Henüz herhangi bir sorun fark etmedim (ancak her zaman mümkün olduğunca python2'den kaçınırım). Python2 severler bunu kesinlikle yapmamalıdır.
Markus Kaukonen

0

Çalıştırırken bu sorunu olan varsa testleri de PyCharm, emin olun ikinci kutu ise kontrolsüz konfigürasyonlarda.


-2

Herkes bir virtualenv gelen Jupyter çekirdeği çalıştırmak çalışırken bu sorunu yaşanıyorsa, sadece doğru eklemek PYTHONPATHiçin kernel.jsonsizin Virtualenv kernel (örnekte Python 3) ait:

{
 "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"
}
}

Kullanıcı dizininiz burada kodlanmıştır. Bu çözüm acemiler için işe yaramayacaktır: lütfen ne yaptığını ve ilgili dosyaları nerede bulacağınızı açıklayın.
Tom Kelly
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.