【发布时间】:2018-05-18 14:33:50
【问题描述】:
我正在运行安装了 Python 2.7 的 Debian Jessie。我尝试创建一个名为 linalg.py 的小模块,它只包含一些辅助函数。我将带有模块的文件夹添加到 PYTHONPATH 中,希望它可以让我简单地从任何 python 项目中导入它。 问题是当我导入它并调用任何函数时,我得到了
AttributeError: 'module' object has no attribute '<xyz>'
我已将__init__.py 添加到包含我的模块的目录中。树看起来像这样:
custom-packages/
python2.7/
linalg/
linalg.py
__init__.py
PYTHONPATH 包含上面的 python2.7 目录。 有问题的文件(linalg.py)
import sympy
import numpy as np
from numpy import dot
def vector(*lst):
return np.array(lst)
def _projection(a, b):
return sympy.Rational(dot(a, b), dot(b, b)) * b
def projection(a, *b):
result = np.zeros(len(a))
for vec in b:
result += _projection(a, vec)
return result
def perpendicular(a, *vecs):
a_hat = projection(a, *vecs)
return a - a_hat
如果我在 python shell 上运行以下命令,我会收到属性错误:
>>> import linalg
>>> linalg.vector(1,2,3,4)
AttributeError: 'module' object has no attribute 'vector'
使用from linalg import * 没有帮助。
【问题讨论】:
-
那不是
linalg.vector;那是linalg.linalg.vector。 -
您没有明确指出您将哪个目录添加到 PYTHONPATH -
linalg目录或python2.7目录(或两者?或其他?)。 -
我的 PYTHONPATH 是 '/home/adam/custom-packages/python2.7' 也做 linalg.linalg.vector 再次给我属性错误 AttributeError: 'module' object has no attribute 'linalg'
-
你没有导入
linalg.linalg。 -
不过,您可能应该完全摆脱外部
linalg包。将linalg.py拉上一个目录,删除linalg目录及其__init__.py,linalg.py将成为linalg模块。然后您将能够以linalg.vector的身份访问vector。
标签: python module attributes packages