【问题标题】:Cannot import from Python six library无法从 Python 六库导入
【发布时间】:2016-09-18 20:04:55
【问题描述】:

无法从六个中导入任何内容。这两行都会产生错误:

from six.moves.urllib.request import urlretrieve

--> Unresolved reference "urlretrieve"

from six.moves import cPickle as pickle

--> Unresolved reference "cPickle"

OSX 10.11.5。 IntelliJ 2016.1.2、PyCharm 2016.1.3、Python 2.7.11、六 1.10.0。

我为尝试修复所做的工作(根据 PyCharm shows unresolved references error for valid code 和其他帖子):

  • 切换的 Python 解释器
  • IntelliJ:删除了想法文件
  • IDE -> 使缓存无效/重新启动
  • 使用相同的源创建了一个全新的项目
  • 切换 IDE(IntelliJ -> PyCharm)
  • 已验证六个是最新的:

_

$ sudo pip install -U six
Requirement already up-to-date: six in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg

我尝试过的 Python SDK:

Python 2.7.11 (/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7)
Python 3.5.1 (/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5)
Python 2.7.10 (/usr/local/bin/python2.7)

没有任何效果。欢迎帮助!谢谢。

---------- 2016 年 5 月 23 日更新 ------------------------------ -

从命令行运行“from Six.moves...”导入行不会产生错误。命令行调用 Python 2.7.11。 PyCharm 也在使用 Python 2.7.11,而且 PyCharm 还显示有六个可用 - 请参见第一个屏幕截图。项目中没有 .pyc 文件,只有 main.py。 奇怪的是,main.py 在 PyCharm 中运行没有错误; “Hello”行确实打印(见第二个屏幕截图)。 此屏幕截图显示了设置中的项目解释器: 我还是一头雾水。

--------- 2016 年 5 月 24 日更新 -----------------------------

import six 在代码和 python shell 中都可以正常工作,执行后,六个。文件 = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/six-1.10.0-py2.7.egg/six.pyc。 但是,PyCharm IDE 仍然在 Six.moves 导入行中显示错误。

【问题讨论】:

  • 您在代码中显示的行是否是您尝试加载和运行的代码?您是否尝试过将这些行输入到 python shell 中?
  • 是的,上面的导入行在我想要运行的代码中。我什至还没有输入操作代码,我只是想让所有的导入首先工作。此代码来自 Google Tensorflow 教程。当我在 python shell 中输入这些行时,我没有收到任何错误,所以也许这些只是我可以忽略的警告,正如 Burhan 在下面建议的那样?
  • 所以,Burhan 告诉您的是,您需要运行知道大约 6 个的 Python 解释器才能导入它。显然,这是从命令行启动 shell 时得到的。您需要弄清楚如何让 PyC​​harm 或 IntelliJ 或任何您想使用的工具运行知道大约 6 个的解释器才能使导入工作。如果是他提到的缓存问题,那么该错误应该会随着缓存重建而消失。尝试删除名为 *.pyc 的文件和名为 pycache 的目录,看看是否有帮助。
  • 谢谢汤姆。我试过你的建议,但没有改变。我在上面的帖子中添加了更多细节和屏幕截图。奇怪的是文件运行但没有留下 .pyc 文件..
  • 你能做到import six吗?如果有,你导入后six.__file__的值是多少?

标签: python intellij-idea pycharm six


【解决方案1】:

您可以使用 import Six 代替 from Six.moves import cPickle,然后使用 Six.moves.cPickle。

它对我有用。

【讨论】:

    【解决方案2】:

    this one似乎回答了这个问题(我不知道如何将这个标记为重复)。

    不幸的是,由于“六”模块的动态特性,没有 简单 解决方案,除非您为此模块实现自己的 python 骨架(这不是直截了当的)。

    【讨论】:

      【解决方案3】:

      six 仅安装在/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7,因此只有在 PyCharm/IntelliJ 中使用该解释器时它才能工作

      注意,如果您创建一个新的虚拟环境,您必须在其中单独安装six

      如果 PyCharm/IntelliJ 向您发出这些警告,但代码实际运行 - 那么这只是 PyCharm 的一个缓存问题,您可以放心地忽略它 - 很有可能在下一次缓存重建时 PyCharm 将更新其缓存。

      【讨论】:

        猜你喜欢
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        相关资源
        最近更新 更多