4

I'm trying to get the Python package OSMnx running on my Windows10 machine. I'm still new to python so struggling with the basics. I've followed the instructions here https://osmnx.readthedocs.io/en/stable/ and have successfully created a new conda environment for it to run in. The installation seems to have gone ok. However, as soon as I try and import it, I get the following error

>>> import osmnx as ox
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\osmnx\__init__.py", line 3, in <module>
    from ._api import *
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\osmnx\_api.py", line 4, in <module>
    from .distance import get_nearest_edge
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\osmnx\distance.py", line 5, in <module>
    import networkx as nx
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\networkx\__init__.py", line 114, in <module>
    import networkx.generators
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\networkx\generators\__init__.py", line 14, in <module>
    from networkx.generators.intersection import *
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\networkx\generators\intersection.py", line 13, in <module>
    from networkx.algorithms import bipartite
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\networkx\algorithms\__init__.py", line 16, in <module>
    from networkx.algorithms.dag import *
  File "C:\Users\User\.conda\envs\ox\lib\site-packages\networkx\algorithms\dag.py", line 23, in <module>
    from fractions import gcd
ImportError: cannot import name 'gcd' from 'fractions' (C:\Users\User\.conda\envs\ox\lib\fractions.py)

I'm running with

   conda version : 4.8.2
   conda-build version : 3.18.11
   python version : 3.7.6.final.0

Is anyone able to advise me? Sorry if this is obvious, as I said I'm new to all this. Thank you

Ddee
  • 143
  • 2

2 Answers2

1

The module fractions is part of the Python standard library. There used to be a function gcd, which, as the linked documentation says, is:

Deprecated since version 3.5: Use math.gcd() instead.

Since the function gcd was removed from the module fractions in Python 3.9, it seems that the question uses Python 3.9, not Python 3.7.6 as the question notes, because that Python version still had fractions.gcd.

The error is raised by networkx. Upgrading to the latest version of networkx is expected to avoid this issue:

pip install -U networkx

Indeed, the change that avoids this error from networkx is: https://github.com/networkx/networkx/commit/b007158f3bfbcf77c52e4b39a81061914788ddf9#diff-21e03bb1d46583650bcad6e960f2ab8a5397395c986942b59314033e963dd3fcL23, and has been released as part of networkx==2.4, networkx==2.5, and networkx==2.5.1, as the tags listed on the commit's GitHub page inform. The current line in networkx is: https://github.com/networkx/networkx/blob/d70b314b37168f0ea7c5b0d7f9ff61d73232747b/networkx/algorithms/dag.py#L9, i.e., from math import gcd.

0 _
  • 10,524
  • 11
  • 77
  • 109
  • 1
    Brilliant. Yes that seems to have been exactly the problem I was having. I took the Python version from conda info but you're right, when I queried python itself, it seems I am running version 3.9.2. I have used conda to update networkx and the errors have disappeared when I now import osmnx. Thank you so much. Learning how to deal with all the packages and environments in Python is not easy. – Ddee Apr 28 '21 at 14:03
1

I am having the same problem. I installed all my packages using conda-forge (recommended install for OSMnx - https://osmnx.readthedocs.io/en/stable/). Conda-forge does not support package updates, if I understand correctly. Instead, remove networkx and reinstall, but be sure to specify version. You will need to reinstall osmnx too

conda remove -c conda-forge networkx
conda install -c conda-forge networkx=2.5
conda install -c conda-forge osmnx
Laura.k.a
  • 31
  • 5