我安装了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 *
没有帮助。
答案 0 :(得分:0)
您似乎希望linalg.py
成为linalg
模块,但您实际上已将其作为linalg
包的linalg
子模块。根据您现在的设置方式,您必须像
vector
import linalg.linalg
linalg.linalg.vector(1, 2, 3, 4)
但你可能不应该这样做。相反,您应该将linalg.py
拉到目录并删除linalg
文件夹,这样您的目录结构就像
custom-packages/
python2.7/
linalg.py
然后
import linalg
linalg.vector(1, 2, 3, 4)
会奏效。