找到'fibo.py'的规范时出错(<class'propertyerror'=“”>:'module'对象没有属性'__path__')

时间:2016-03-26 01:12:46

标签: 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
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

现在我从cli python3运行模块为 -

> python3 -m fibo.py

我收到错误

Error while finding spec for 'fibo.py' (<class 'AttributeError'>:
'module' object has no attribute '__path__')

__path__变量具有当前目录。我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:66)

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

  1. .inside-row > * { position: relative; top: 50%; transform: translate(0, -50%); } :参数是<code>文件的名称。点是文件名的一部分。
  2. python fibo.py:参数是Python模块的名称,没有.py。圆点表示包装; python -m fibo表示&#34;包.py中的模块fibo.py。&#34;
  3. 对于像您这样的简单脚本,这是一个很小的区别。但是对于更大或更复杂的东西,它会对py语句的行为产生重要影响:

    1. 第一个表单将导致fibo搜索import文件所在的目录(然后搜索其他各个位置,包括标准库;有关完整列表,请参阅sys.path)。
    2. 第二种形式将import搜索当前目录(以及其他各种地方)。
    3. 出于这个原因,在Python 3下,大多数涉及包的设置都需要第二种形式(而不仅仅是目录中的松散模块),因为脚本的父包可能无法在第一种形式下导入,会导致事情破裂。

      但对于像这样的简单脚本,任何一种形式都可以。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是运行python 3脚本的两种不同方式:

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

python -m fibo:参数是Python模块的名称,不带.py