【问题标题】:Import module works in terminal but not in IDLE导入模块在终端中有效,但在 IDLE 中无效
【发布时间】:2015-07-27 19:31:48
【问题描述】:

我正在尝试在 Windows 计算机上导入 pyodbc 模块。它适用于终端,但不适用于 IDLE。 IDLE中的错误信息是:

Traceback (most recent call last):

  File "FilePath/Filename.py", line 3, in <module>
      import pyodbc
  ImportError: No module named pyodbc

【问题讨论】:

  • 尝试获取空闲版本以及从终端运行的python,您可以使用-import sys; print(sys.version)
  • 同时查看sys.path 两者....看到有什么不同吗?

标签: python module terminal python-import python-idle


【解决方案1】:

这通常发生在使用不同路径安装多个版本的 python 时。您可以通过打开 IDLE 终端并使用

来检查是否有多个安装
import sys
sys.version
sys.path

这些命令将打印系统 PATH 和当前 python 实例的版本。在 IDLE 和命令行终端中都使用它来查看各自的不同之处。一旦你知道哪个版本是你想要的,然后删除另一个。您也可以删除所有 python 实例,然后重新安装一个干净的 python 环境,但是您必须使用 pip 或 easy_install 重新安装所有模块

【讨论】:

  • 在 unix 或 Mac 上,应该删除 Python 的系统安装,即使通常使用备用安装。
  • @TerryJanReedy 为什么会这样?
  • 因为 Mac 和至少一些 linux 发行版附带了经过测试可与系统 Python 一起使用的 Python 脚本。
  • 这不适用于 OP 的错误,但我会补充说,如果在同一路径中存在与您尝试导入的包同名的脚本,您可能会收到导入错误你从哪里启动 IDLE。
【解决方案2】:
  1. 在cmd中打开python(输入python并回车)
  2. 在cmd中导入模块(输入import modulename
  3. 输入modulename.__file__
  4. 你会得到模块存放的路径
  5. 复制对应的文件夹
  6. 在 IDLE 中,import sys 并输入 sys.executable 以获取查找要导入的模块的路径
  7. 将模块的文件夹粘贴到 IDLE 查找模块的路径中。

这个方法对我有用。

【讨论】:

  • 这对我也很有效!谢谢。
【解决方案3】:

您可以在安装包后pip show 并了解安装包的位置。

之后检查 IDLE sys.path,如果包含包的目录不在 sys.path 中,请尝试添加它。

导入系统 sys.path.append("/home/dm/.local/lib/python3.6/site-packages") # 或其他关于包的 `pip show` 文件夹。

【讨论】:

  • 只有当我从 IDE 运行时它才对我有用,如果我想从 cmd 运行 .py 文件,它会说找不到模块。如果我想逐行在cmd上运行它会卡住。
【解决方案4】:

我找到了解决方案。它对我有用

问题是你的安装目录和python版本目录不匹配。
解决办法是>>>

  1. 在搜索栏中键入 %localappdata%,然后转到此文件夹。
  2. 在这里选择程序文件夹。然后选择 Programs , Python , Python version , Scripts
  3. 复制 Scripts 文件夹的位置
  4. 打开命令提示符并输入 cd //yourpath(在我的例子中 cd C:\Users\3C HOUSE\AppData\Local\Programs\Python\Python37\Scripts
  5. 如果你想安装 numpy,现在运行 pip install numpy

【讨论】:

    【解决方案5】:

    发生这种情况是因为安装了多个 python(32 位版本、64 位版本)或 3v 和 2.7v,因此要解决此问题,您必须像这样为特定版本调用 idle

    cd 到该文件夹​​中 import 在 cmd 中正常工作 的版本的dir,在下面键入此命令

    pythonw.exe Lib\idlelib\idle.pyw
    

    此命令将为该版本调用空闲 并且导入会正常工作

    【讨论】:

      【解决方案6】:

      当您将具有 import pandas 的 python 脚本与站点包(例如 pandas)放在同一文件夹中并使用在 CMD 上使用的相同版本的 python 时,它应该有助于在 IDLE 中运行您的脚本。

      【讨论】:

        【解决方案7】:

        检查您的代码和模块的路径。将模块复制到代码为我工作的路径。 'sys.executable' 将给出存储代码的路径。

        【讨论】:

          【解决方案8】:

          我在尝试导入在终端上成功导入但无法在 IDLE 上安装的模块时也遇到了同样的问题。

          我是如何解决的?
          假设你知道如何在终端以及 python 解释器内部执行命令

          • 打开终端并执行以下命令:

            :~$python3

            Python 3.6.9 (default, Jan 26 2021, 15:33:00)
            [GCC 8.4.0] on linux
            Type "help", "copyright", "credits" or "license" for more information.
            >>>
            >>>
            >>> import sys
            >>> sys.version
            '3.6.9 (default, Jan 26 2021, 15:33:00) \n[GCC 8.4.0]'
            >>> sys.path
            ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', 
            '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist- 
            packages', '/usr/lib/python3/dist-packages']
            >>>
            

          现在在你的 python3 解释器中导入你的模块。

            >>> import nester
            >>>
            >>> nester.__file__
            '/usr/local/lib/python3.6/dist-packages/nester.py'
            >>>
          
          • 打开您的 IDLE 并运行以下命令并比较它们

            Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 
            64 bit (AMD64)] on win32
            Type "help", "copyright", "credits" or "license()" for more 
            information.
            >>> import sys
            >>> sys.version
            '3.9.1 (tags/v3.9.1:1e5d33e, Dec  7 2020, 17:08:21) [MSC v.1927 64 bit 
            (AMD64)]'
            >>> sys.path 
            

          ['','C:\Users\username\AppData\Local\Programs\Python\Python39\Lib\idlelib', 'C:\Users\username\AppData\Local\Programs\Python\Python39\python39. zip'、'C:\Users\username\AppData\Local\Programs\Python\Python39\DLLs'、'C:\Users\username\AppData\Local\Programs\Python\Python39\lib'、'C:\Users \username\AppData\Local\Programs\Python\Python39', 'C:\Users\username\AppData\Local\Programs\Python\Python39\lib\site-packages']

            >>> sys.executable
          

          'C:\Users\username\AppData\Local\Programs\Python\Python39\pythonw.exe'

          现在,如果您比较终端和 IDLE 的两个输出,

          • 终端模块位置与 IDLE 不同
          • 我在 windows 机器上使用 Ubuntu 18 终端

          所以我只是将我的文件复制到“C”目录并确保其文件权限。就是这样。

            :~$ cp -p /usr/local/lib/python3.6/dist-packages/nester.py /mnt/c/Users/username/AppData/Local/Programs/Python/Python39/Lib/
          

          成功了!!

          【讨论】:

            【解决方案9】:

            对于windows,打开命令提示符输入pip show pyodbc获取包路径并复制路径。 然后打开 idle 并运行这些行

            import sys
            sys.path
            

            匹配来自命令提示符的路径和在 IDLE 中运行上述行提供的列表中提到的路径。如果未提及路径,则在空闲状态下运行这些行

            sys.path.append("Enter the copied path of package here")
            

            执行这些行后,通过导入包再次检查它是否适合您。

            【讨论】:

              猜你喜欢
              • 2017-03-29
              • 2016-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-08-27
              相关资源
              最近更新 更多