Python 3.x 查找'的规范时出错;fibo.py';(<;class';AttributeError';>;:';模块';对象没有属性';路径&&';)

Python 3.x 查找'的规范时出错;fibo.py';(<;class';AttributeError';>;:';模块';对象没有属性';路径&&';),python-3.x,python-module,Python 3.x,Python Module,我在fibo.py文件中有一个模块,该模块具有以下功能- #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

我在
fibo.py
文件中有一个模块,该模块具有以下功能-

#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
我得到了错误

Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
'module' object has no attribute '__path__')
查找“fibo.py”的规范时出错(: “module”对象没有属性“\uuuuu path\uuuuuu”)
\uuuu路径\uuuu
变量具有当前目录。我不知道如何解决这个问题。

有两种方法可以运行Python 3脚本

  • python fibo.py
    :参数是
    .py
    文件的名称。点是文件名的一部分
  • python-m fibo
    :参数是python模块的名称,不带
    .py
    。圆点表示包装
    fibo.py
    表示“包
    fibo
    中的模块
    py
  • 对于像您这样的简单脚本来说,这是一个小小的区别。但对于更大或更复杂的内容,它对
    import
    语句的行为有重要影响:

  • 第一个表单将导致
    import
    搜索
    .py
    文件所在的目录(然后搜索各种其他位置,包括标准库;有关完整列表,请参阅)
  • 第二个表单将使
    import
    搜索当前目录(然后搜索其他各种位置)
  • 因此,在Python3下,大多数涉及包(而不仅仅是目录中的松散模块)的设置都需要第二种形式,因为脚本的父包在第一种形式下可能不可导入,这可能会导致崩溃


    但是对于这样一个简单的脚本,两种形式都可以。

    除了Kevin的答案之外:您应该将脚本文件夹的路径添加到PYTHONPATH环境变量中,以使其在某些操作系统上工作。

    运行python 3脚本有两种不同的方法:

    python fibo.py:参数是.py文件的名称


    python-m fibo:参数是一个python模块的名称,没有.py

    很明显,第二种形式对于这样的情况是不合适的,看看它是如何引起错误的。@Tadhgmandald Jensen:仔细看看。OP在模块的名称后面放一个.py。模块名不是文件名。@Kevin-谢谢。我为模块添加了.py扩展名,因此出现了错误,这对我来说完全是误导。感谢您的更正。似乎我们还必须使用-m选项来传递参数……我想您刚刚为我节省了两个小时来思考我的Jenkins构建失败的原因:)谢谢!谢谢你@AMIT SAMOTA我读了上面的答案,但是你的答案很清楚很快。我重读了第一个答案,现在我两个都明白了。对于其他读者来说,您可能正在寻找不带.py位的python-mcom.mypackage.mypythongfile。
    Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
    'module' object has no attribute '__path__')