Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
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
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
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
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
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