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.lpaprès avoir assignéTrueàotne fonctionnerait pas, mais apparemment c'est le cas. Il serait préférable d'appelerotquelque chose commehas_ot, par exemple. Voir aussi la très bonne réponse de @ gmds.