J'ai un module dans un fichier fibo.py
qui a les fonctions suivantes -
#fibonacci numbers module
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
Maintenant, quand je lance le module à partir du cli python3 en tant que -
> python3 -m fibo.py
Je reçois l'erreur
Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
'module' object has no attribute '__path__')
La variable __path__
a le dir actuel. Je ne sais pas comment résoudre ce problème.
Vous pouvez exécuter un script Python 3 de deux manières.
python fibo.py
: l'argument est le nom du fichier .py
. Les points font partie du nom de fichier.python -m fibo
: l'argument est le nom d'un module Python, sans .py
. Les points indiquent les paquets; fibo.py
signifie "le module py
dans le paquetage fibo
."Ceci est une petite distinction pour un script simple comme le vôtre. Mais pour quelque chose de plus grand ou de plus complexe, cela a un effet important sur le comportement de la déclaration import
:
import
cherche dans le répertoire où réside le fichier .py
(puis dans divers autres endroits, y compris la bibliothèque standard; voir sys.path
pour une liste complète).import
fouille le répertoire current (et divers autres endroits).Pour cette raison, sous Python 3, le second formulaire est requis pour la plupart des configurations impliquant des packages (plutôt que des modules vides dans un répertoire), car le package parent du script peut ne pas être importable sous le premier formulaire, ce qui peut entraîner des problèmes. casser.
Mais pour un script simple comme celui-ci, l'une ou l'autre forme convient.
En plus de la réponse de Kevin: vous devez ajouter un chemin d'accès à votre dossier de script à la variable d'environnement PYTHONPATH pour le faire fonctionner sous un système d'exploitation.