我在装有 CentOS Linux 7.3.1611 (Core) 操作系统的计算机上使用 Python 3.5.1 。
我正在尝试使用 PyTorch 并开始学习 本教程。
不幸的是,示例的#4 行造成了麻烦:
>>> torch.Tensor(5, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'Tensor'
我无法理解这个错误……当然在 Torch 中,’torch’ 确实有一个属性 ‘Tensor’。同样的命令在 Torch 中也有效。
我怎么解决这个问题?
原文由 DavideChicco.it 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在运行的 Python 二进制文件没有安装
torch
。它在模块搜索路径上 确实 有一个名为torch
的目录,并且它被视为 命名空间包:任何没有
__init__.py
文件的目录,位于您的模块搜索路径上,将被视为命名空间,前提是在搜索路径的其他任何地方都 _没有找到具有该名称的其他 Python 模块或包_。这意味着如果为您的 Python 二进制文件安装了
torch
,则是否存在本地torch
目录并不重要:The above shows that
sys.path
lists thetorch
directory first, followed byadditional_path/torch
, but the latter is loaded as thetorch
module when you尝试导入它。这是因为 Python 在加载命名空间包之前优先考虑顶级模块和包。您需要为当前的 Python 二进制文件正确安装 torch,请参阅 项目主页;使用
pip
时,您可能希望使用带有-m
开关的 Python 二进制文件:所以将主页说明中使用的—替换为
pip3
python3.5 -m pip
;python3.5
也可以是 Python 二进制文件的完整路径。请使用正确的
download.pytorch.org
最新版本的 URL。您不必将目录移到一边,但如果您确实想要但不知道它位于何处,请使用
print(torch.__path__)
如上所示。同样,请注意,如果您在本地
torch
目录中 确实 有一个__init__.py
文件,它将成为一个常规包,它会屏蔽由pip
安装的包正常site-packages
位置。如果你有这样的包,或本地torch.py
单文件模块,你需要重命名它们。在这种情况下,诊断信息看起来有所不同:注意差异;上面的命名空间包使用
<module 'name' (namespace)>
,而常规包使用)
, while a plain module uses
`。此类包和模块(不是命名空间包)首先被发现并停止搜索。如果找到的包或模块不是您想要的,则需要将它们移到一边或重命名。