Хорошей отправной точкой для отслеживания таких 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)