zlatko-minev / pyEPR

Powerful, automated analysis and design of quantum microwave chips & devices [Energy-Participation Ratio and more]
https://pyepr-docs.readthedocs.io
Other
168 stars 232 forks source link

Running pyEPR with python 3.10 #106

Open GyeonghunKim opened 2 years ago

GyeonghunKim commented 2 years ago

While running pyepr with python 3.10, importing ImportError occurred related to attrdict while importing pyepr.

My code was just "import pyEPR as epr" and I attached an error message below.

This problem is mainly about the syntax from collections import Mapping is deprecated in python 3.10 and replaced to from collections.abc import Mapping.

While searching in Google, I found some news about attrdict is no more maintained, and I think this means we cannot expect whether they would fix this issue with python 3.10. Is there any plan to replace the attrdict library with another library or solve this issue differently?

Thanks.


ImportError Traceback (most recent call last) File ~\Anaconda3\envs\pyepr_attrdict_test\lib\site-packages\pyEPR__init__.py:78, in 77 try: ---> 78 from attrdict import AttrDict as Dict 79 except (ImportError, ModuleNotFoundError):

File ~\Anaconda3\envs\pyepr_attrdict_test\lib\site-packages\attrdict__init__.py:5, in 1 """ 2 attrdict contains several mapping objects that allow access to their 3 keys as attributes. 4 """ ----> 5 from attrdict.mapping import AttrMap 6 from attrdict.dictionary import AttrDict

File ~\Anaconda3\envs\pyepr_attrdict_test\lib\site-packages\attrdict\mapping.py:4, in 1 """ 2 An implementation of MutableAttr. 3 """ ----> 4 from collections import Mapping 6 import six

ImportError: cannot import name 'Mapping' from 'collections' (C:\Users\aass98998\Anaconda3\envs\pyepr_attrdict_test\lib\collections__init__.py)

During handling of the above exception, another exception occurred:

ImportError Traceback (most recent call last) Input In [3], in <cell line: 1>() ----> 1 import pyEPR as epr

File ~\Anaconda3\envs\pyepr_attrdict_test\lib\site-packages\pyEPR__init.py:80, in 78 from attrdict import AttrDict as Dict 79 except (ImportError, ModuleNotFoundError): ---> 80 raise ImportError("""Please install python package AttrDict. 81 AttrDict is in PyPI, so it can be installed directly 82 (https://github.com/bcj/AttrDict) using: 83 $ pip install attrdict""") 85 ############################################################################## 86 # Python header 88 author__ = "Zlatko Minev, Zaki Leghas, and the pyEPR team"

ImportError: Please install python package AttrDict. AttrDict is in PyPI, so it can be installed directly (https://github.com/bcj/AttrDict) using: $ pip install attrdict

github-actions[bot] commented 2 years ago

👏👏👏 You are awesome! Thank you for making your first issue to pyEPR ' first issue

GyeonghunKim commented 2 years ago

I would like to work on this issue. Can you assign me to this issue?

zlatko-minev commented 2 years ago

Hi @GyeonghunKim, very glad to hear you want to contribute on this issue (and thanks for making it)! Let me know if you run into any problems

WhiteSymmetry commented 2 years ago

After implementing these solutions in Windows10&Python3.10.4, Qiskit-Metal started working:

  1. anaconda3\envs\***\Lib\site-packages\attrdict (collections --> collections.abc (modify in all files)) [corrected module: https://github.com/qfizik/AttrDict]
  2. pyEPR (anaconda3\envs\***\Lib\site-packages\pyEPR__init.py: try: --> import collections.abc try: collections = collections.abc from attrdict.dictionary import AttrDict as Dict except AttributeError: collections = collections ) [corrected module: https://github.com/qfizik/pyEPR/blob/master/pyEPR/init__.py]
  3. Quantum-Metal (anaconda3\envs\***\Lib\site-packages\qiskit_metal_gui\widgets\create_component_window\parameter_entry_window.py: from collections import OrderedDict, Callable --> from collections import OrderedDict from collections.abc import Callable ) [corrected module: https://github.com/qfizik/qiskit-metal/blob/main/qiskit_metal/_gui/widgets/create_component_window/parameter_entry_window.py]

Screenshot 2022-04-01 163803

Screenshot 2022-04-01 163028

GyeonghunKim commented 2 years ago

@WhiteSymmetry Thanks for your comment. This method definitely works for individual users. However, without solving this problem inside pyEPR, every user should do that procedure every time they install the pyEPR and pyEPR-related libraries (such as qiskit-metal). Also, I think this is not appropriate for the CI/CD process.