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可以引用但无法访问内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytest使用@pytest.mark.parametrize()实现参数化的示例代码

    pytest使用@pytest.mark.parametrize()实现参数化的示例代码

    这篇文章主要介绍了pytest使用@pytest.mark.parametrize()实现参数化,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Python +Selenium解决图片验证码登录或注册问题(推荐)

    Python +Selenium解决图片验证码登录或注册问题(推荐)

    这篇文章主要介绍了Python Selenium解决图片验证码登录或注册问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python3新特性函数注释Function Annotations用法分析

    python3新特性函数注释Function Annotations用法分析

    这篇文章主要介绍了python3新特性函数注释Function Annotations用法,结合实例形式分析了Python3函数注释的定义方法与使用技巧,需要的朋友可以参考下
    2016-07-07
  • Numpy判断数组是否全0的三种方法

    Numpy判断数组是否全0的三种方法

    本文介绍了三种判断NumPy数组是否全为零的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 详解python变量的命名和使用

    详解python变量的命名和使用

    变量名只能包含字母、数字和下划线,本文主要介绍了详解python变量的命名和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • Django中外键ForeignKey介绍使用

    Django中外键ForeignKey介绍使用

    本文主要介绍了Django中外键ForeignKey介绍使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • python实现的防DDoS脚本

    python实现的防DDoS脚本

    实现原理是,查询netstat的连接数,同IP超过一定连接的用iptables封禁一定时间,自动封禁,自动解封。
    2011-02-02
  • 如何解决MNIST数据集下载速度较慢并失败的问题

    如何解决MNIST数据集下载速度较慢并失败的问题

    这篇文章主要介绍了如何解决MNIST数据集下载速度较慢并失败的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 探索Python数据可视化库中Plotly Express的使用方法

    探索Python数据可视化库中Plotly Express的使用方法

    在数据分析和可视化领域,数据的有效呈现是至关重要的,python作为一种强大的编程语言,提供了多种数据可视化工具和库,本文将介绍Plotly Express的基本概念和使用方法,帮助读者快速入门并掌握数据可视化的技巧
    2023-06-06
  • 三个Python常用的数据清洗处理方式总结

    三个Python常用的数据清洗处理方式总结

    这篇文章主要为大家详细介绍了python数据处理过程中三个主要的数据清洗说明,分别是缺失值/空格/重复值的数据清洗,感兴趣的小伙伴可以了解一下
    2022-12-12

最新评论