python中torch可以成功引用但无法访问属性的解决办法

 更新时间:2024年01月22日 10:56:05   作者:竹底蜉蝣  
这篇文章给大家介绍了我们在python中运行程序时遇到一个奇怪的报错,torch可以成功引用但无法访问属性,这是比较奇怪的一件事,因为torch肯定是可以访问Tensor,所以本文给大家介绍了torch可以成功引用但无法访问属性的解决办法,需要的朋友可以参考下

运行程序时遇到了一个奇怪的报错:

# ... 省略 ...
AttributeError: module 'torch' has no attribute 'Tensor'

意思是模块torch没有Tensor属性。这是比较奇怪的一件事,因为torch肯定是可以访问Tensor。

后来在stackoverflow上找到了一个类似的错误,底下有人回复说这是因为python在执行import torch时引入的并不是torch包,而是一个命名空间(对应一个名为torch的文件夹)。

验证

首先查看一下是不是torch的引用真的有问题:

$ python
>>> import torch
>>> torch.Tensor
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'Tensor'
>>> torch.nn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'nn'

引入torch没有问题,但是不仅不能访问Tensor,连nn也不能访问。这说明我们的确引入了一个错误的torch。

>>> print(torch)
<module 'torch' (namespace)>
>>> print(torch.__path__)
_NamespacePath(['.../python3.8/site-packages/torch'])

果然,这个torch不是我们期望的torch,而是一个命名空间,而且我们也可以定位到问题所在的路径。

解决

沿着路径找下去,的确有一个名为torch的目录,其中包含很多东西,应该是正常torch所需要的那些。但是其中没有__init.py__,不知道是什么原因导致的。

位于模块搜索路径上的任何不存在 __init__.py 文件的目录都将被视为命名空间。
(在搜索路径的其他任何位置都没有同名模块或包)

所以,在torch目录下创建一个__init__.py是不是就好啦?

我没有选择这样做,因为我不确定torch目录下的其他文件是不是完好的。我选择删除掉这个 torch目录,然后pip重新安装torch。最后问题成功解决。

当然,也有可能你本身是有正确的torch包,只不过有了额外的名为torch的目录导致这个问题。那你可以选择将目录改名来规避该问题。

结果

重新安装torch后,再测试一下。这回对了,python清楚地知道这是一个package,而不是一个namespace。

>>> import torch
>>> print(torch)
<module 'torch' from '.../lib/python3.8/site-packages/torch/__init__.py'>
>>> print(torch.__path__)
['.../lib/python3.8/site-packages/torch']

到此这篇关于python中torch可以成功引用但无法访问属性的解决办法的文章就介绍到这了,更多相关python torch可以引用但无法访问内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python中的List

    详解Python中的List

    这篇文章主要为大家介绍了Python中的List,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Python Requests库知识汇总

    Python Requests库知识汇总

    这篇文章主要介绍了Python Requests库学习总结,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 基于PyQt5制作一个动态指针时钟

    基于PyQt5制作一个动态指针时钟

    这篇文章主要和大家分享如何利用Python中的PyQt5制作一个动态指针时钟来显示实时时间,文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • 利用Python进行全面的GPU环境检测与分析

    利用Python进行全面的GPU环境检测与分析

    这篇文章主要为大家详细介绍了如何使用Python编写一个强大的 GPU 诊断工具,它能够全面收集和分析系统中的 GPU 相关信息,感兴趣的可以了解下
    2025-01-01
  • Python实现OCR识别之pytesseract案例详解

    Python实现OCR识别之pytesseract案例详解

    这篇文章主要介绍了Python实现OCR识别之pytesseract案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • python实现守护进程、守护线程、守护非守护并行

    python实现守护进程、守护线程、守护非守护并行

    本篇文章主要介绍了python实现守护进程、守护线程、守护非守护并行,详细的介绍了守护子进程、非守护子进程并存,守护子线程非守护子进程并存的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python+selenium实现自动化百度搜索关键词

    python+selenium实现自动化百度搜索关键词

    在本篇文章里我们给大家分享了一篇关于python+selenium实现自动化百度搜索关键词的实例文章,需要的朋友们可以跟着操作下。
    2019-06-06
  • python看某个模块的版本方法

    python看某个模块的版本方法

    今天小编就为大家分享一篇python看某个模块的版本方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python使用TCP和UDP协议向IP地址发送字符串的代码示例

    Python使用TCP和UDP协议向IP地址发送字符串的代码示例

    在 Python 中,向特定的 IP 地址发送字符串通常是通过网络协议来实现的,常见的协议包括 TCP(传输控制协议)和 UDP(用户数据报协议),本文将详细介绍如何使用 TCP 和 UDP 协议向指定的 IP 地址发送字符串,并提供相应的代码示例,需要的朋友可以参考下
    2025-07-07
  • 现代 Python 包管理器 uv的使用详解

    现代 Python 包管理器 uv的使用详解

    uv的CLI规范和Go有点类似,尤其是go help和 uv help,uv 的任何命令有不理解的地方可以查看一下这个命令的 help,这篇文章主要介绍了现代Python包管理器uv,需要的朋友可以参考下
    2025-06-06

最新评论