问题
I have a module in a fibo.py
file which has the following functions -
#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
Now when I run the module from the cli python3 as -
> python3 -m fibo.py
I get the error
Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
'module' object has no attribute '__path__')
The __path__
variable has has the current dir . I am not sure how to fix this.
回答1:
There are two ways you can run a Python 3 script.
python fibo.py
: The argument is the name of the.py
file. Dots are part of the filename.python -m fibo
: The argument is the name of a Python module, without.py
. Dots indicate packages;fibo.py
means "the modulepy
in the packagefibo
."
This is a small distinction for a simple script like yours. But for something bigger or more complex, it has an important effect on the behavior of the import
statement:
- The first form will cause
import
to search the directory where the.py
file lives (and then search various other places including the standard library; see sys.path for a full list). - The second form will make
import
search the current directory (and then various other places).
For this reason, under Python 3, the second form is required for most setups which involve packages (rather than just loose modules in a directory), since the parent package of the script may not be importable under the first form, which can cause things to break.
But for a simple script like this, either form is fine.
回答2:
These are two different ways to run a python 3 script:
python fibo.py: The argument is the name of the .py file.
python -m fibo: The argument is the name of a Python module, without .py
回答3:
In addition to Kevin's answer: you should add path to your script folder to PYTHONPATH environment variable to make it work on some OS.
来源:https://stackoverflow.com/questions/36230492/error-while-finding-spec-for-fibo-py-class-attributeerror-module-objec