क्यों पायथन 3.6.1 फेंकता है गुण: मॉड्यूल 'एनम' में कोई विशेषता नहीं है 'IntFlag'?


119

मैंने अभी MacOS X के लिए Python 3.6.1 स्थापित किया है

जब मैं कंसोल चलाने (या पायथन 3 के साथ कुछ भी चलाने) का प्रयास करता हूं, तो यह त्रुटि होती है:

  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 के भीतर मौजूद है। तो, एट्रीब्यूट को क्यों फेंका जा रहा है?


8
क्या enum.pyकिसी भी संयोग से आपकी वर्किंग डायरेक्टरी में फ़ाइल का नाम है?
जुआनपा। श्रीविल्लागा

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 $ PATH में है
BryanWheelock

2
... यह वही नहीं है जो मैंने पूछा। मैंने पूछा कि क्या enum.pyआपकी वर्किंग डायरेक्टरी
juanpa.arrivillaga

4
वास्तव में, यह था। "सुनिश्चित करें कि आपकी शेल कॉन्फ़िगरेशन फ़ाइलों में कहीं भी, PYTHONPATH आपके पायथन 2.7 इंस्टॉलेशन की ओर इशारा करता है।" ऐसा लगता है कि यह बहुत अच्छी तरह से इस कारण हो सकता है।
juanpa.arrivillaga

2
-Iसाइट-संकुल और पर्यावरण चर को अनदेखा करने और / या -vआयात के बारे में
क्रिया

जवाबों:


230

यह इसलिए है क्योंकि आपका enumमानक पुस्तकालय enumमॉड्यूल नहीं है। आपके पास शायद पैकेज enum34स्थापित है।

एक तरीका यह है कि अगर यह मामला है तो संपत्ति का निरीक्षण करें enum.__file__

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

अजगर 3.6 के बाद से enum34 पुस्तकालय अब मानक पुस्तकालय के साथ संगत नहीं है। लाइब्रेरी भी अनावश्यक है, इसलिए आप इसे बस अनइंस्टॉल कर सकते हैं।

pip uninstall -y enum34

यदि आपको अजगर संस्करणों पर चलने की कोड की आवश्यकता है <= 3.4 और> 3.4, तो आप enum-compatआवश्यकता के रूप में प्रयास कर सकते हैं। यह केवल enum34मानक पुस्तकालय एनम के बिना अजगर के पुराने संस्करणों के लिए स्थापित करता है ।


यह मारता है ipython2 --> traitlets --> enum34। (दुर्भाग्य से, enum34स्थापित .../2.7/site-packages/enumनहीं है .../2.7/site-packages/enum34- मुसीबत के लिए पूछ रहा है।)
डेसीस

1
हाँ, आप सही हैं - यह किसी के लिए भी एक नोट है जो दोनों का उपयोग करने की कोशिश करता है।
डेनिस

9
मेरे मामले में इसने मुझे दिया Skipping enum34 as it is not installed.. मैं
३-०:

1
क्या होगा यदि print(enum.__file__)मुझे इस देता है: /usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/enum.py। क्या इसका मतलब है कि मेरे पास एक मानक enum पुस्तकालय है और नहीं enum34? संपादित करें: हाँ, pip uninstall enum34मुझे दियाSkipping enum34 as it is not installed.
एंड्रे

1
@ HåkenLid यह तब होता है जब मैं jupyter notebookरास्ते से खोलने की कोशिश करता हूं ।
सिंथिया जीएस

89

निश्चित नहीं है कि क्या आपके पास अभी भी यह मुद्दा है। मेरे पास एक समान मुद्दा था और मैं इसे केवल परेशान करके हल करने में सक्षम थाPYTHONPATH

$ unset PYTHONPATH


2
PyCharm उपयोगकर्ताओं के लिए बस FYI करें, PYTHONPATH I को क्लिक करने के लिए Settings->Build, Execution, Deployment->Console->Python Console। मैंने तब PYTHONPATH चर को शीर्षक वाले क्षेत्र से हटा दिया Environment variables। नोट: इस लेखन के समय, मैं PyCharm 2017.1.2 का उपयोग कर रहा था।
मिकी

यह काम करता है, लेकिन मेरे पायथन 2 पुस्तकालयों को शामिल करने वाले रास्तों का कोई संयोजन नहीं है जो मुझे काम करने के लिए मिल सकता है। मुझे यह जानकर अच्छा लगेगा।
उल्फ असलाक

हां, खिड़कियों में, मैंने अपने cmd प्रॉम्प्ट को पुनः आरंभ किया, यह काम किया, शायद अप्रत्यक्ष रूप से इसे PYTHONPATH रीसेट कर दिया
करण काव

12

मेरे लिए यह त्रुटि pclharm में एकीकृत करने के लिए gcloud घटक ऐप-इंजन-अजगर की स्थापना के बाद उत्पन्न हुई। मॉड्यूल की स्थापना रद्द करने में मदद की, भले ही pycharm अब ऐप-इंजन पर अपलोड नहीं कर रहा है।


4
मुझे PyCharm के तहत फ्लास्क चलाने में यह त्रुटि मिली, और प्रोजेक्ट (प्राथमिकता -> भाषा और रूपरेखा -> Google ऐप इंजन) से AppEngine समर्थन को अक्षम करके इसे ठीक कर दिया। पायथन 3 के लिए दूसरा जीन रनटाइम ऐप इंजन देव सर्वर का उपयोग नहीं करता है इसलिए यह समझ में आता है (यह पायथन 2.x के लिए है)।
ब्रेट

9

अगर PyCharm में Google ऐप इंजन Python 3.7 मानक पर्यावरण परियोजना चलाते समय यह त्रुटि होने के कारण कोई भी यहाँ आ रहा है, तो आपको बस इतना करना है

  • सुनिश्चित करें कि चलाने के लिए कॉन्फ़िगरेशन फ्लास्क के लिए है, Google ऐप इंजन कॉन्फ़िगरेशन के लिए नहीं।
  • फिर प्राथमिकताएँ >> भाषाएँ और फ्रेमवर्क >> Google ऐप इंजन के तहत Google ऐप इंजन समर्थन को अक्षम करें

इस लिंक के अनुसार इसका कारण है

कुल मिलाकर लक्ष्य यह है कि आपका ऐप पूरी तरह से पोर्टेबल होना चाहिए और किसी भी मानक पायथन वातावरण में चलना चाहिए। आप मानक पायथन ऐप लिखते हैं, ऐप इंजन पायथन ऐप नहीं। इस बदलाव के एक हिस्से के रूप में, आपको अपने ऐप की मुख्य कार्यक्षमता के लिए मालिकाना ऐप इंजन API और सेवाओं का उपयोग करने की आवश्यकता नहीं है। इस समय, ऐप इंजन एपीआई पायथन 3.7 रनटाइम में उपलब्ध नहीं हैं।

मुझे लगता है कि जब हम PyCharm में एक python 3.7 प्रोजेक्ट बनाते हैं, तो यह Google ऐप इंजन प्रोजेक्ट है, यह अभी भी उसी तरह से करने की कोशिश करता है, जैसा कि एक python2.7 ऐप करता है


इसलिए, जब Pycharm से Google ऐप इंजन के लिए लिखते हैं, तो क्या किसी को मैन्युअल रूप से क्लाउड पर अपना कोड अपलोड करना होगा या क्या Pycharm अभी भी ऐप इंजन पर अपलोड कर पाएगा?
बेन

@ मुझे यकीन नहीं है कि क्लाउड (Google ऐप इंजन) पर कोड को मैन्युअल रूप से अपलोड करने से आपका क्या मतलब है। यदि आप कमांड का उपयोग करके ऐप इंजन को तैनात करने की बात कर रहे हैं gcloud app deploy। इसका pycharm से कोई लेना-देना नहीं है।
जोसेफ अब्राहम

मैं इस पर सिर्फ एक शौकिया हूं, लेकिन मैंने सोचा कि पाइक्रोम में ऐप इंजन समर्थन को सक्षम करने से आपको अपने कोड को तैनात करने के लिए मेनू कमांड का उपयोग करने की क्षमता मिली। लेकिन, जब आप Pycharm (यानी पायथन 3.7 का उपयोग करने के लिए) में एप्लिकेशन इंजन समर्थन को अक्षम करते हैं, तो आपको अपना कोड तैनात करने के लिए कमांड लाइन पर जाने की आवश्यकता है। क्या मेरे पास वह अधिकार है या क्या मैंने गलत तरीके से बताया कि ऐप इंजन सामान 2.7 के तहत कैसे काम करता है?
बेन

@ इसलिए कि पायथन ऐप इंजन सपोर्ट टूल को पाइथन 2.7 के लिए लक्षित किया गया है। जैसा कि मैंने अपने जवाब में उल्लेख किया है कि Google पायथन 3.7 मानक ऐप इंजन ऐप को मानक पायथन ऐप के रूप में मानता है। और मेरा मानना ​​है कि यही कारण है कि पायक्रोम भी पायथन 3.7 ऐप इंजन ऐप के लिए इस तरह से व्यवहार करता है।
जोसेफ अब्राहम

8

अस्वीकरण: कृपया, @ juanpa.arrivillaga, यदि आप इस उत्तर को देखते हैं, तो अपना स्वयं का लिखने के लिए स्वतंत्र महसूस करें और मैं इस पोस्ट को हटा दूंगा।

@ juanpa.arrivillaga ने ऊपर उल्लेख किया था :

क्या किसी भी संयोग से आपकी वर्किंग डाइरेक्टरी में फ़ाइल नाम enum.py है?

यह वह मुद्दा था जिसका मैंने सामना किया। मुझे उस समय अजगर पर एनम मॉड्यूल के बारे में पता नहीं था और मैंने अपनी परीक्षण फ़ाइल को नाम दिया था enum.py

के बाद से फ़ाइल नाम है मॉड्यूल का नाम है, वहाँ एक संघर्ष था। मॉड्यूल पर अधिक जानकारी यहां: https://docs.python.org/2/tutorial/modules.html


तुमने मेरी जान बचाई है।
गत

6

Pycharm वरीयताओं में "Google ऐप इंजन समर्थन" को अक्षम करना मेरे लिए इस मुद्दे को निर्धारित करता है।

pycharm एप्लिकेशन इंजन प्राथमिकताएँ


मेरे लिये कार्य करता है। मेरे पास एक ही मुद्दा था पिस्काम से डिबग मोड में फ्लास्क चल रहा है
खान हुआ

यह मेरे लिए काम करता है। क्योंकि वास्तव में google sdk python2 का उपयोग करता है। ...
जोस मार

3

Håken Lid के उत्तर ने मेरी समस्या को हल करने में मदद की (धन्यवाद!), Python3.7 में मौजूद मेरे मामले में एक डॉक कंटेनर में फ्लास्क चलाने ( FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7)।

मेरे मामले में, enum34एक अन्य पुस्तकालय ( pip install smartsheet-python-sdk) द्वारा स्थापित किया जा रहा था । एक समान डॉकटर कंटेनर समस्या के साथ आने वालों के लिए, यहां मेरी अंतिम डॉकफाइल (संबंधित लाइनों से छीन ली गई है):

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

2

यदि आपको python2 और python3 दोनों के लिए PYTHONPATH रखना है, तो आप अपने bash_profile में उचित PYTHONPATH सेट करने के लिए अन्य विवरण लिख सकते हैं:

अपने PYTHONPATH2, और PYTHONPATH3 चर को अपने ~ / .bash_profile में हार्डकोड करें, और इसके अंत में निम्नलिखित उपनाम जोड़ें:

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

मेरा python(python2 को संदर्भित करता है) क्योंकि मैं अक्सर python2 का उपयोग करता हूं।


यह सुझाव काम नहीं करता है; अभी भी वही त्रुटि मिलती है।
डेरेक

2

जब कभी मुझे यह समस्या हुई:

विशेषता: मॉड्यूल 'एनम' में कोई विशेषता नहीं है 'IntFlag'

बस पहले मैं कमांड चलाता हूं:

unset PYTHONPATH 

और फिर मेरी इच्छित कमांड को चलाएं और फिर उसमें सफलता प्राप्त करें।


1
ऐसा इसलिए है क्योंकि आपके PYTHONPATH को मेरे मामले में, पुराने संस्करण के अजगर के सामान की ओर इशारा करना चाहिए। इसने काम किया
nish

मेरे मामले में बासी VENV। टिप के लिए Thx :)
Janusz Skonieczny

2

Enum34 के 1.1.8 संस्करण को स्थापित करना मेरे लिए काम कर गया।

मैं pumroject.toml में enum34 = "== 1.1.8" जोड़कर इसे ठीक करने में सक्षम था। स्पष्ट रूप से enum34 की v1.1.8 में एक विशेषता थी जो इस त्रुटि से बचती थी, लेकिन यह v1.1.9 + में वापस आ गई। यह सिर्फ एक समाधान है। पर्यावरण मार्करों का उपयोग करने के लिए पैकेजों के लिए बेहतर समाधान होगा ताकि आपको तब तक Enum34 को स्थापित करने की आवश्यकता न हो।

स्रोत: https://github.com/python-poetry/poetry/issues/1122


1
इस समाधान ने मेरे लिए काम किया
अजीत

1
इस समाधान ने मेरे लिए काम किया, जब उपयोग करने की कोशिश कर रहा था pyinstaller
जैक हेल्स

2

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:। यह आपको स्थापित enum34 का संस्करण देगा। अब इसे अनइंस्टॉल करें pip uninstall enum34और आवश्यक संस्करण को फिर से इंस्टॉल करें
pip install "enum34==1.1.20"


1

मेरे पास पायथन 2 है और पायथन 3 मेरे कंप्यूटर पर स्थापित है। कुछ अजीब कारणों से मेरे पास Python 3 के sys.path में भी Python2 की साइटपैकेज लाइब्रेरी डायरेक्टरी का एक रास्ता है जब री मॉड्यूल को कॉल किया जाता है। अगर मैं पायथन 3 चलाता हूं और एनुम आयात print(enum.__file__)करता हूं और सिस्टम साइट-पैकेज को यह पायथन 2 रास्ता नहीं दिखाता है। तो एक बहुत ही मोटा और गंदा हैक है, सीधे उस मॉड्यूल को संशोधित करना, जिसमें एनम आयात किया गया है (ट्रेसबैक पथ का अनुसरण करें) और एनम आयात करने से पहले निम्नलिखित कोड डालें:

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

इससे मेरी समस्या हल हो गई।


0

यहां तक ​​कि मेरे पास यह समस्या थी कि पायथन एमएम जीपीसी_tools.protoc --version को PYTHONPATH को साइट-पैकेज तक सेट करना था और सभी कमांड प्रॉम्प्ट विंडो को बंद करना था और यह काम किया। आशा है कि यह gRPC उपयोगकर्ताओं के लिए मदद करता है।


0

मुझे यह समस्या ubuntu20.04 में jyyterlab में अपने वर्चुअल env कर्नेल में python3.8 और tanorflow 2.2.0 के साथ थी। त्रुटि संदेश था

 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

मुझे आशा है कि अजगर 2 जल्द ही मर जाएगा! ट्यूरिसिन, मार्कस


यह समाधान आपके सिस्टम में भयानक गड़बड़ कर सकता है! आपको पूरे सिस्टम के लिए डिफ़ॉल्ट अजगर बदलने के बजाय वर्चुअन का उपयोग करना चाहिए।
एलेक्स बारनोव्स्की

यह बात बताने के लिए धन्यवाद। मैंने अभी तक किसी भी समस्या पर ध्यान नहीं दिया है (लेकिन मैं हमेशा जितना संभव हो python2 से बचता हूं)। पायथन 2 प्रेमी निश्चित रूप से ऐसा नहीं करते हैं।
मार्कस कौकोनेंन

0

जब चल रहा है आप समस्या आ रही है, तो परीक्षण में PyCharm, सुनिश्चित करें कि दूसरे बॉक्स है अनियंत्रित विन्यास में।


-2

अगर किसी को एक virtualenv से जुपिटर कर्नेल को चलाने की कोशिश करते समय यह समस्या हो रही है, तो बस अपने virtualenv कर्नेल (उदाहरण में पायथन 3) PYTHONPATHको सही जोड़ें kernel.json:

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

आपकी उपयोगकर्ता निर्देशिका यहां हार्डकोड की गई है। यह समाधान नौसिखियों के लिए काम नहीं करेगा: कृपया बताएं कि यह क्या कर रहा है और प्रासंगिक फाइलों को कहां खोजना है।
टॉम केली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.