Я несколько раз запускал несколько версий Python на своем Ubuntu 10.10, но у меня были некоторые проблемы с python2.5 (для Google app-engine). Поэтому я взорвал установку 2.5 (и удалил каталог сайтов-пакетов вместе с Python2.5) и переустановил... получил ту же ошибку, файл не найден, который был там.. поэтому я решил, что я пытаюсь установить Virtual env и работать с этим. ну теперь кажется, что все мои питоны были закрыты.
Я не могу выполнить файл py из командной строки, например. "python python.py", и это касается всех версий, которые у меня есть. Поэтому мне интересно, есть ли какие-то глобальные настройки, которые получили? не имеют понятия, где искать. В приведенном ниже примере показано, что файл virtualenv может быть импортирован, но не может быть выполнен как обычный, просто не найден. Я изменил разрешения для выполнения в файле virtualenv.py, но это не имело никакого значения. Я установил virtualenv на несколько версий Python, 2.6, 2.7 (в дополнение к 2.5), и я получаю одинаковое поведение на всех, поэтому я подозреваю Bash или что-то в Ubuntu, а не python, а не виртуальное env.
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 fine. Тем временем запустив свою альтернативную машину :-(
Хорошей отправной точкой для отслеживания такого WTF является запуск процесса под 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 с вашим скриптом, скриптом, который открывается, и несуществующим файлом, а затем разграничивает трассировки. Думаю, вы обнаружите, что ошибка находится в другом месте, но ошибка сообщается неправильно
Если virtualenv.py не находится в локальной папке, вы можете попробовать явно установить PYTHONPATH, чтобы узнать, исправляет ли это это (см. "Python -h"), и если да, то посмотрите, что модифицирует sys.path в настройке, где он работает (например, снова запустить strace)
Когда вы импортируете его, он проходит через путь Python, чтобы найти его, но когда вы вводите:
python2.5 virtualenv.py
который предполагает его в текущем каталоге.