Python代码在IDLE中运行正常,但在命令行中失败?
我正在学习Python,按照我正在阅读的书中的例子写了一个脚本,里面导入了urllib库。在IDLE中运行这个脚本时一切正常,但如果我去文件所在的文件夹,运行“python test.py”,就会出现错误,提示我
Traceback (most recent call last):
File "test.py", line 1, in ?
import urllib.request
ImportError: No module named request
我确认我使用的是Python 3.1.2。有没有什么建议或者想法,为什么在命令行中会失败呢?
我的代码:
import urllib.request
import time
price = 99.99
while price > 1.01:
time.sleep(3)
page = urllib.request.urlopen("http://www.beans-r-us.biz/prices.html")
text = page.read().decode("utf8")
where = text.find('>$')
start_of_price = where + 2
end_of_price = start_of_price + 4
price = float(text[start_of_price:end_of_price])
print ("Buy!")
5 个回答
这个错误提示是说找不到库文件,所以在不同的环境中可能有些地方不一样。
这里有一个关于Python模块的教程,可能会对你有帮助。
你可以看看PYTHONPATH这个环境变量:
$ echo $PYTHONPATH
至少在UNIX系统上是这样。(说实话,我不太记得Windows的情况了。)
你还可以查看一下Python的内置路径,使用这一行:
print sys.path
很可能PYTHONPATH在命令行和IDLE环境中是不同的。
你可以选择用 from urllib import request
这行代码来引入库,
或者在调用的时候直接指定它。
import urllib
urlib.request (...)
urllib.request
是在 Python 3 中引入的。如果你在命令行运行代码时,可能用的是旧版的 Python 2.x。
你可以在命令行输入 python --version
来查看你正在使用哪个版本的 Python。
根据 Drewdin 的评论进行编辑
在 Mac OS X 上运行 Python 3.1.2 的安装程序时,我看到以下内容:
注意:这个安装包默认不会更新你的 shell 配置文件,也不会在 /usr/local 目录下安装文件。你可以随时双击“更新 Shell 配置文件”来将 3.1.2 设置为默认的 Python。
安装程序会把应用程序放在你的应用程序文件夹中的“Python 3.1”里,而底层的文件会放在 /Library/Frameworks/Python.framework。它还可以选择性地在 /usr/local 中放置命令行工具的链接,默认情况下你需要把框架里的“bin”目录添加到你的 shell 搜索路径中。
所以,根据你安装的方式,你可能已经在 /usr/local/bin
中放置了链接,这样它就会在你的路径中。如果你在安装时选择了这个选项,你只需要在命令行中输入 python3
或 python3.1
就可以使用更新的版本。
否则,你可以双击那个“更新 Shell 配置文件”,或者把以下内容添加到你的路径中:
export PATH=$PATH:/Library/Frameworks/Python.framework/Versions/3.1/bin
默认情况下,Python 3.x 在 Unix/Linux 环境中不会将 python
命令设置为别名,因为这可能会干扰依赖于默认安装的 Python 的系统进程/命令。