Python 2.7 自定义模块属性错误
Python 2.7 attribute error on custom module
我正在 运行安装了 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.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)
会起作用。
我正在 运行安装了 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.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)
会起作用。