Python和Ubuntu文件未找到
我在我的Ubuntu 10.10上运行了好几个版本的Python,最近遇到了一些关于python2.5(用于Google应用引擎)的问题。于是我把2.5版本删掉了(连同site-packages目录和Python2.5目录一起删除),然后重新安装...结果还是出现同样的错误,提示找不到一个本来应该存在的文件。于是我想试试安装Virtualenv来解决这个问题。可是现在似乎我所有的Python都出问题了。
我无法通过命令行执行.py文件,比如输入“python python.py”都不行,而且所有版本的Python都是这样。我在想是不是有什么全局设置被搞坏了?我完全不知道该去哪里找。下面的例子显示虽然可以导入virtualenv文件,但却无法正常执行,总是提示找不到。我确实把virtualenv.py文件的权限改成了可执行,但这没有任何帮助。我在多个Python版本上安装了virtualenv,包括2.6、2.7(还有2.5),结果都是同样的问题,所以我怀疑是Bash或者Ubuntu的某些东西出了问题,而不是Python或virtualenv的问题。
enter code here
tom@tom-Satellite-A105:~$ python2.5 virtualenv.py env
python2.5: can't open file 'virtualenv.py': [Errno 2] No such file or directory
tom@tom-Satellite-A105:~$ python2.5
Python 2.5.6 (r256:88840, Aug 6 2011, 08:40:44)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import virtualenv
>>> exit()
^^^^^^显示Python2.5可以正常导入virtualenv。与此同时,我准备启动我的备用机器 :-(
相关问题:
2 个回答
当你导入一个东西时,Python会通过它的路径去寻找这个东西。但是,当你输入:
python2.5 virtualenv.py
这段代码假设这个东西就在你当前的目录里。
要追踪这些奇怪的问题,一个好的起点是用strace来运行这个程序。strace会详细记录程序所做的系统调用和每个调用的结果……这样你就可以看看到底是文件找不到,还是其他什么问题。
$ trace python NOFILE.py
execve("/usr/bin/python", ["python", "NOFILE.py"], [/* 63 vars */]) = 0
brk(0) = 0x9bef000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78de000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=160388, ...}) = 0
mmap2(NULL, 160388, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb78b6000
close(3) = 0
...[snip]...
stat64("NOFILE.py", 0xbfbc53bc) = -1 ENOENT (No such file or directory)
stat64("NOFILE.py", 0xbfbc53cc) = -1 ENOENT (No such file or directory)
open("NOFILE.py", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
write(2, "/usr/bin/python2.6: can't open f"..., 85/usr/bin/python2.6: can't open file 'NOFILE.py': [Errno 2] No such file or directory) = 85
exit_group(2) = ?
比如,你可以用strace来运行python和你的脚本,脚本里有一个能打开的文件和一个不存在的文件,然后对比一下记录……我猜你会发现错误其实在别的地方,但错误信息却报告得不对。
如果local文件夹里没有virtualenv.py,你可以试着手动设置PYTHONPATH,看看这样能不能解决问题(可以查看“python -h”了解更多)。如果能解决,那就看看在正常情况下,是什么在修改sys.path的(比如再用strace运行一次)。