为啥 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-learn
和 sklearn
后,我在 .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 中
这个 SQL 查询怎么会在 Oracle SQL Developer 中工作而不是在代码中工作?
为啥 Google Maps Cordova ionic angular 仅在 Android 中工作而在 IOS 中为空白?