【问题标题】:IPython not able to import variables from a moduleIPython 无法从模块中导入变量
【发布时间】:2021-12-30 02:47:09
【问题描述】:

我在一个名为secrets.py 的python 文件中有一个变量,我试图从IPython 中访问它(特别是一个API 密钥)。如果我尝试from secrets import API_KEY,我会收到无法导入变量的错误消息。然而,有趣的是,标准的 python 环境(即在终端中运行python)可以很好地导入变量。标准 python 环境和 IPython 都是从同一个目录/虚拟环境中运行的。我不确定这里出了什么问题。任何帮助将不胜感激。

【问题讨论】:

  • 我遇到过这种情况,IPython 使用的 Python 与运行 python 时使用的不同。当您运行每个ipythonpython 并确认它们是否相同时,您能否仔细检查欢迎文本中的 Python 版本?
  • 你能分享一下具体的错误吗?如果您的 Ipython 出于某种原因不在正确的工作目录中,它可能会尝试在内置的 secrets 模块中查找此变量。通过这两种方法导入对我有用
  • 这是一个很难回答的问题,因为它更像是调试。我无法为您提供灵丹妙药,但请尝试在 IPython 中运行 !pwd 以确认您在您认为的目录中,等等。
  • @Catyre 该通用错误的结尾是重要部分,它将向您显示它试图访问的secrets.py 的路径。如果我从错误的位置执行此操作,我会得到ImportError: cannot import name 'API_KEY' from 'secrets' (C:\Users\username\AppData\Local\Programs\Python\Python39\lib\secrets.py)。而如果是变量的问题,则路径将是您工作目录中的secrets.py,而不是 Python 库。
  • @shriakhilc 我与您分享的是逐字记录的错误,没有遗漏,没有给定路径。话虽如此,我解决了这个问题。感谢您的帮助!

标签: python python-3.x ipython


【解决方案1】:

secretsa Python module,用于“生成适用于管理密码、帐户身份验证、安全令牌和相关机密等数据的加密强随机数。” ImportError的问题,说明可能有冲突,因为Python不承认secrets.py是你的创作,而是标准库模块

解决方案是简单地重命名您的文件,更改其名称。

【讨论】:

    【解决方案2】:

    IPython 假设我正在导入的 secrets.py 是 Python 的原生 secrets.py,而不是我创建的那个。而不是弄乱路径变量或解决此问题所需的其他任何东西,只需将我的 secrets.py 重命名为其他东西即可解决问题。我仍然不确定为什么这种行为在正常的 python 环境中会有所不同,所以如果有人能解释一下,我会全神贯注。

    编辑:在一些指导下,我弄清楚了为什么他们的行为不同。尽管 IPython 的 sys.path 中有当前工作目录,但它位于 python 的 secrets.py 所在的文件夹之后。因此,IPython 检查了那个文件夹,发现有一个secrets.py,并认为这是它打算从中导入 API 密钥的那个。而在普通 python 中,CWD 是列表中的第一个条目,因此它找到正确的 API 密钥没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2021-01-22
      • 2019-11-28
      相关资源
      最近更新 更多