2
votes

Pas clair sur la méthode d'importation

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 commentaires

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 par True , mais si l'importation depuis ot.lp échoue , est défini sur False . 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 depuis ot.lp après avoir assigné True à ot ne fonctionnerait pas, mais apparemment c'est le cas. Il serait préférable d'appeler ot quelque chose comme has_ot , par exemple. Voir aussi la très bonne réponse de @ gmds.


3 Réponses :


1
votes

ot.lp est un module de transport optimal python . Le lien vers le code source est joint.


2 commentaires

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 .........



1
votes

Je crois que cette bibliothèque s'appelle POT: Python Optimal Transport . Vous pouvez l'installer avec:

pip install POT


0 commentaires

3
votes

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.


0 commentaires