J'ai besoin d'utiliser du code en ligne et je ne suis pas sûr de certaines méthodes d'importation utilisées. Voici la partie supérieure du code:
from __future__ import absolute_import, division, print_function import itertools import multiprocessing import sys import time import warnings import numpy as np ot = True try: from ot.lp import emd_c, check_result from scipy.spatial.distance import _distance_wrap # ot imports scipy anyway except: warnings.warn('cannot import module \'ot\', module \'emd\' will be empty') ot = False
Qu'est-ce que c'est ot.lp
? Autant que je sache, cela ressemblerait à True.lp
, mais je n'ai jamais vu cela auparavant (je ne sais même pas quoi chercher sur Google). De plus, j'obtiens toujours l'erreur et je n'ai aucune idée de ce que je dois faire pour y remédier. Merci!
3 Réponses :
ot.lp est un module de transport optimal python . Le lien vers le code source est joint.
Je me sens tellement stupide maintenant ... Merci beaucoup pour ça! Cependant, comment se fait-il qu'il n'y ait aucun problème à utiliser le même nom pour un package et une variable?
Il est probable que certains déconseillent cela, mais Python sait qu'une fois que vous écrivez from ... import .... vous faites référence à un package et non à une variable et ne confond donc pas les deux . Aussi, ne vous sentez jamais stupide .........
Je crois que cette bibliothèque s'appelle POT: Python Optimal Transport . Vous pouvez l'installer avec:
pip install POT
Ici, malheureusement, ot
signifie deux choses: le nom d'une variable bool
, et un module (auquel d'autres se sont liés) .
L'intention du code est que la variable ot
soit True
si le module ot
peut être importé, et False
sinon. Par conséquent, sans doute, ailleurs dans le code, des vérifications par rapport à la valeur de la variable ot
sont effectuées.
Ceci, en soi, n'est pas une mauvaise pratique, mais le nom de la variable pourrait être amélioré, au moins.
Lorsque vous utilisez un nom dans une instruction import
, Python cherchera ce nom dans les répertoires spécifiés dans PYTHONPATH
variable d'environnement et ignore les noms similaires définis dans le code. Donc, par exemple, cela fonctionne:
sklearn = None from sklearn import linear_model
Vous pouvez voir que Python ne résout pas la variable sklearn
pour tenter d'importer linear_model de
Aucun
.
Où as tu trouvé ça?
Probablement celui-ci pot.readthedocs.io/en/stable/_modules/ot /lp.html le ot dans votre texte n'est pas remplacé par true
Cela semble être une manière désagréable d'avoir un indicateur,
ot
, qui commence parTrue
, mais si l'importation depuisot.lp
échoue , est défini surFalse
. Vraisemblablement plus tard, il y aura un peu plus de code qui dépendra du succès de l'importation des éléments de distance du robot terrestre. Intuitivement, il semble qu'essayer d'importer depuisot.lp
après avoir assignéTrue
àot
ne fonctionnerait pas, mais apparemment c'est le cas. Il serait préférable d'appelerot
quelque chose commehas_ot
, par exemple. Voir aussi la très bonne réponse de @ gmds.