Forum EduPython

Echanges autour d'EduPython.

Vous n'êtes pas identifié(e).

#1 2019-10-04 16:02:15

Lucho
Membre
Inscription : 2019-10-04
Messages : 3

Installer module Pyroutelib3 sur Edupython

Bonjour,
j'aimerais utiliser Edupython 2.7 au lycée dans le cadre des SNT, ce logiciel fonctionne très bien avec panda et Folium mais pour le calcul d'itinéraire il faut installer le module Pyroutelib3. J'arrive à le faire fonctionner avec PYthon 3.7 mais pas avec Edupython. Avez-vous une solution ?
Merci de vos réponses

Hors ligne

#2 2019-10-05 17:41:56

LaurentG
Membre
Inscription : 2019-10-05
Messages : 3

Re : Installer module Pyroutelib3 sur Edupython

Bonjour, même soucis j'ai bien utilisé conda pour importer le module mais je pense qu'il s'agit d'un problème de path peut être ....

from pyroutelib3 import Router
ImportError: cannot import name 'Router'

Hors ligne

#3 2019-10-06 13:27:42

LaurentG
Membre
Inscription : 2019-10-05
Messages : 3

Re : Installer module Pyroutelib3 sur Edupython

Alors finalement après avoir vérifié plus attentivement, je ne trouve pas le module via conda mais en glissant le bon fichier pyroutelib3.py dans le même dossier que mon script python l'importation se passe bien mais pas l'exécution du script...

Traceback (most recent call last):
  File "C:\Users\Laurent\Google Drive\SNT\Cartographie\itin01.py", line 5, in <module>
    depart = router.findNode(46.078025, 6.409053)
  File "C:\Users\Laurent\Google Drive\SNT\Cartographie\pyroutelib3.py", line 409, in findNode
    self.getArea(lat, lon)
  File "C:\Users\Laurent\Google Drive\SNT\Cartographie\pyroutelib3.py", line 218, in getArea
    downloadedSecondsAgo = math.inf
AttributeError: 'module' object has no attribute 'inf'

La version de python est la 3.4.5

Hors ligne

#4 2019-10-11 09:30:49

Olivier K
Membre
Inscription : 2019-10-11
Messages : 2

Re : Installer module Pyroutelib3 sur Edupython

Bonjour,

Edupython version 2.7 fait appel à Python version 3.4.5.

C'est malheureusement insuffisant pour la constante math.inf qui n'a été introduite que dans la version 3.5 de Python ! (Source : documentation officielle des fonctions mathématiques de Python).

D'après cette même documentation, math.inf pourrait être remplacée par float('inf').

À noter que, même si vous remplacez math.inf par float('inf') aux deux emplacements où le module pyroutelib3 y fait appel, le module ne fonctionnera toujours pas car il fait aussi appel à os.fspath qui a été introduit dans la version 3.6 de Python !

Hors ligne

#5 2019-10-11 09:58:23

magicvinni
Administrateur
Inscription : 2017-12-22
Messages : 317

Re : Installer module Pyroutelib3 sur Edupython

Bon, en effet, il faut être motivé.... Comme l'a dit Olivier

-> Il faut installer le module pyroutelib3

-> math.inf n'existe qu'à partir de Python 3.5, on peut contourner dans le fichier pyroutelib3 ou dans le code ainsi :

import math
math.inf = float("inf")

-> Si vous êtes au lycée, il faut renseigner le proxy :

import urllib.request
proxy = urllib.request.ProxyHandler({'https': '172.16.0.1:3128'})
opener = urllib.request.build_opener(proxy)
urllib.request.install_opener(opener)

-> Ajouter la fonction fspath au module OS comme l'a dit Olivier :

import os
os.fspath = lambda x : x  # Pas terrible, mais fonctionne dans 90% des cas

Ce qui donne le code :

import math
math.inf = float("inf")
from pyroutelib3 import Router
import folium
import os
os.fspath = lambda x : x
import urllib.request
#create the object, assign it to a variable
proxy = urllib.request.ProxyHandler({'https': '172.16.0.1:3128'})
# construct a new opener using your proxy settings
opener = urllib.request.build_opener(proxy)
# install the openen on the module-level
urllib.request.install_opener(opener)


router = Router("car")

depart = router.findNode(46.078025, 6.409053)
arrivee = router.findNode(46.193253,  6.234158)
status, route = router.doRoute(depart, arrivee)
if status == 'success':
    routeLatLons = list(map(router.nodeLatLon, route))
c= folium.Map(location=[46.078025, 6.409053],zoom_start=10)
for coord in routeLatLons:
    coord=list(coord)
    folium.Marker(coord).add_to(c)
c.save('maCarte.html')

Bon courage,
Vincent

Hors ligne

Pied de page des forums