Error while finding spec for 'fibo.py" (: "module" obiekt nie posiada atrybutu " path ")
Mam moduł w pliku fibo.py
, który ma następujące funkcje -
#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
Teraz kiedy uruchamiam moduł z cli python3 jako -
> python3 -m fibo.py
I get the error
Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
'module' object has no attribute '__path__')
Zmienna __path__
ma bieżący katalog. Nie wiem, jak to naprawić.
3 answers
Istnieją dwa sposoby uruchomienia skryptu Pythona 3.
-
python fibo.py
: argument jest nazwą pliku.py
. Kropki są częścią nazwy pliku. -
python -m fibo
: argument jest nazwą modułu Pythona, Bez.py
. Kropki oznaczają Pakiety;fibo.py
oznacza " modułpy
w pakieciefibo
."
Jest to małe wyróżnienie dla prostego skryptu, takiego jak Twój. Ale dla czegoś większego lub bardziej złożonego, ma to istotny wpływ na zachowanie import
wypowiedź:
- pierwszy formularz spowoduje
import
przeszukanie katalogu, w którym znajduje się plik.py
(a następnie przeszukanie różnych innych miejsc, w tym biblioteki standardowej; Zobaczsys.path
pełna lista). - drugi formularz sprawi, że
import
przeszukiwać będzie bieżący katalog (a następnie różne inne miejsca).
Z tego powodu, w Pythonie 3, druga forma jest wymagana dla większości konfiguracji, które obejmują pakiety (a nie tylko luźne Moduły w katalog), ponieważ pakiet nadrzędny skryptu może nie być importowany pod pierwszym formularzem, co może spowodować uszkodzenie rzeczy.
Ale dla takiego prostego skryptu, każda forma jest w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-26 01:35:57
Są to dwa różne sposoby uruchamiania skryptu Pythona 3:
Python fibo.py: argumentem jest nazwa pliku. py.
Python-m fibo: argument jest nazwą modułu Pythona, bez .py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-02 04:32:37
Oprócz odpowiedzi Kevina: powinieneś dodać ścieżkę do folderu skryptu do zmiennej środowiskowej PYTHONPATH, aby działała na niektórych systemach operacyjnych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 09:38:51