为啥 python 模块在 shell 中工作而不在脚本中工作?

Posted

技术标签:

【中文标题】为啥 python 模块在 shell 中工作而不在脚本中工作?【英文标题】:Why do python modules work in shell but not in the script?为什么 python 模块在 shell 中工作而不在脚本中工作? 【发布时间】:2017-11-19 04:32:06 【问题描述】:

我正在尝试制作两个程序。我想要一个打印我居住城市的当前天气,我希望另一个从在线帐户中获取数据并将其返回。对于那些脚本,我导入了 yweather 模块和 requests 模块。当我在 shell 中导入它们时没有问题,但是当我运行脚本时它显示“ImportError:没有名为 yweather 的模块”。我做错了什么?

壳牌:

>>> import requests
>>> 

脚本:

Traceback (most recent call last):
  File "/Users/tim/Desktop/login.py", line 1, in <module>
    import requests
ImportError: No module named requests 

yweather 模块也会发生这种情况

谢谢

【问题讨论】:

您确定在这两种情况下都使用同一个解释器吗? 您确定在运行脚本和提示符时使用相同的 Python 版本吗? 向我们展示脚本的第一行。 @sphere 第一行正好是import requests,正如我们在错误中看到的那样 好的,那么脚本本身就没有像#!/bin/python那样的shebang。然后向我们展示你是如何在 shell 中运行脚本的。 【参考方案1】:

我刚刚遇到了和你类似的情况。 导入的模块是 opensbli。 这是安装指南:https://github.com/opensbli/opensbli/blob/version2.0/docs/installation_guide.pdf

我犯的错误是我首先通过sudo命令将它克隆到/opt/,然后移动到我的用户拥有的目录。问题是,由于我最初使用sudo 克隆它,因此opensbli 目录的所有者是root 而不是我的用户,这似乎是我无法在脚本中导入它的原因,即使使用sudo命令。

修复很简单。只需删除克隆并在没有sudo 的情况下再次克隆。

【讨论】:

【参考方案2】:

我和你有同样的问题,但使用包“sklearn”。 安装 scikit-learnsklearn 后,我在 .py 文件中运行 import sklearn 并返回“ModuleNotFoundError: No module named 'sklearn.ensemble'; 'sklearn' is not a package”。

原来我犯了一个有趣的错误。我将文件命名为“sklearn.py”。所以当我导入sklearn 时,它可能只是尝试导入自己。我不应该将该文件命名为“sklearn.py”。

【讨论】:

【参考方案3】:

如果您在 Windows 上,您可能已经安装了两次 Python。你是用 Anaconda 安装 Python 并独立安装 Python 的吗?

当您在命令提示符下键入 Python 时,您得到的 Python 版本是否与解释器中的版本相同?

如果是,则进入系统面板并删除在命令提示符下运行的 Python 版本的程序。

否则你可以在命令提示符下检查你使用的pythonpath:

echo %PATH% 

如果在 Python 解释器中修复它的方法不同:

 import sys
 sys.path.append('your certain directory')

或者您也可以在命令提示符中设置新路径:

 setx PATH "%PYTHONPATH%;C:\python27"

希望对你有帮助

【讨论】:

【参考方案4】:

也许您在脚本中使用的是虚拟环境,而模块并未安装在那里。

【讨论】:

【参考方案5】:

你确定它是同一个版本的 Python 吗?尝试在 shell 和脚本中运行以下命令,比较结果。

import sys
sys.version

如果它们不相同,则说明您安装了两个版本。

【讨论】:

它们都返回相同的值。但在尝试了几件事后,我发现我可以在使用终端时毫无问题地运行脚本。

以上是关于为啥 python 模块在 shell 中工作而不在脚本中工作?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式闪存在 Chrome 中工作而不是在 FireFox 中

音频和振动在模拟器中工作而不是在 ios 设备上

这个 SQL 查询怎么会在 Oracle SQL Developer 中工作而不是在代码中工作?

为啥 Google Maps Cordova ionic angular 仅在 Android 中工作而在 IOS 中为空白?

Swift presentViewController 完成块仅在调试中工作而不在发布中调用

本地(文件://)网站图标在 Firefox 中工作,而不是在 Chrome 或 Safari 中 - 为啥?