查找“fibo.py”规范时出错(<class 'AttributeError'>: 'module' object has no attribute '__path__')
Posted
技术标签:
【中文标题】查找“fibo.py”规范时出错(<class \'AttributeError\'>: \'module\' object has no attribute \'__path__\')【英文标题】:Error while finding spec for 'fibo.py' (<class 'AttributeError'>: 'module' object has no attribute '__path__')查找“fibo.py”规范时出错(<class 'AttributeError'>: 'module' object has no attribute '__path__') 【发布时间】:2016-07-13 19:58:37 【问题描述】:我在 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__
变量具有当前目录。我不确定如何解决这个问题。
【问题讨论】:
【参考方案1】:有两种方法可以运行 Python 3 脚本。
python fibo.py
:参数是.py
文件的名称。点是文件名的一部分。
python -m fibo
:参数是 Python 模块的名称,没有 .py
。圆点表示包裹; fibo.py
表示“fibo
包中的模块 py
。”
对于像您这样的简单脚本来说,这是一个小小的区别。但是对于更大或更复杂的事情,它对import
语句的行为有重要影响:
-
第一种形式将导致
import
搜索.py
文件所在的目录(然后搜索包括标准库在内的各种其他位置;完整列表请参见sys.path
)。
第二种形式将使import
搜索当前目录(然后搜索其他各个地方)。
因此,在 Python 3 下,大多数涉及包(而不仅仅是目录中的松散模块)的设置都需要第二种形式,因为脚本的父包可能无法在第一种形式下导入,这可能会导致损坏。
但是对于这样一个简单的脚本,任何一种形式都可以。
【讨论】:
显然第二种形式对于这种情况并不适用,看看它是如何引发错误的。 @TadhgMcDonald-Jensen:仔细看看。 OP 在模块名称后放置一个 .py 。模块名不是文件名。 @Kevin - 谢谢。我为模块添加了 .py 扩展名,因此出现了错误,这对我来说完全是误导。谢谢指正。 似乎我们也必须使用 -m 选项来传递参数....... 我想你为我节省了 2 个小时来弄清楚我的 Jenkins 构建失败的原因 :) 谢谢!【参考方案2】:除了 Kevin 的回答:您应该将脚本文件夹的路径添加到 PYTHONPATH 环境变量中,以使其在某些操作系统上工作。
【讨论】:
【参考方案3】:这是运行 python 3 脚本的两种不同方式:
python fibo.py:参数是 .py 文件的名称。
python -m fibo:参数是Python模块的名称,不带.py
【讨论】:
谢谢@AMIT SAMOTA 我阅读了上面的答案,但你的答案清晰而快速。我重读了第一个答案,现在我都明白了。对于其他读者,您可能正在寻找不带 .py 位的 python -m com.mypackage.mypythongfile。以上是关于查找“fibo.py”规范时出错(<class 'AttributeError'>: 'module' object has no attribute '__path__')的主要内容,如果未能解决你的问题,请参考以下文章
查找“pyspark.worker”的模块规范时出错(ModuleNotFoundError:没有名为“pyspark”的模块)