Вызывается неправильный интерпретатор python

Я обновил свой интерпретатор python, но, по-моему, старый звонит. Когда я проверяю версию, я получаю:

$ python -V Python 3.0.1 

Но я считаю, что старый интерпретатор все еще называется. Когда я запускаю команду:

 python myProg.py 

Скрипт работает правильно. Но когда я вызываю его с помощью команды

 ./myProg.py 

Я получаю сообщение об ошибке:

 AttributeError: 'str' object has no attribute 'format' 

По-видимому, это связано с тем, что вызываемый старый интерпретатор. Как я могу это исправить? Я запускаю Mac OS X 10.5. Это как-то связано с первой строкой:

 #!/usr/bin/python 

Я только начинал с python и не очень хорошо разбираюсь в интерпретируемых языках, поэтому я не уверен, что происходит.

Edit: Вау, это было быстро. Большое спасибо!

  • unicode и кодировка для персидского или арабского в python3
  • Являются ли кортежи действительно неизменными в Python?
  • Как создать словарь Python с двойными кавычками в качестве формата котировки по умолчанию?
  • py.test не может импортировать мой модуль
  • Python. Как я могу рандомизировать вопросы, содержащие A, B, C, D
  • $ PYTHONSTARTUP с python 2.7 и python 3.2
  • библиотека или код python для чтения уже открытого файла Excel
  • Невозможно установить lxml на windows, фатальная ошибка C1083: Не удается открыть файл include: 'libxml / xmlversion.h'
  • 6 Solutions collect form web for “Вызывается неправильный интерпретатор python”

    В соответствии с первой строкой скрипта #!/usr/bin/python вы вызываете интерпретатор Python в /usr/bin/python (что, скорее всего, тот, который поставляется с Mac OS X). Вы должны изменить этот путь на путь, где вы установили ваш интерпретатор Python 3 (вероятно /usr/local/bin/python или /opt/local/bin/python ); или вы можете просто изменить эту строку, чтобы читать #!/usr/bin/env python , который будет вызывать сначала python в вашей PATH (которая, кажется, более новая версия, которую вы установили).

    Во-первых, рекомендуемая линия shebang:

     #!/usr/bin/env python 

    Это позволит убедиться, что интерпретатор python вызывается, когда вы ./foo.py – это тот же интерпретатор, который вызывается при вызове python из командной строки.

    Из вашего описания я подозреваю, что если вы это сделали:

     which python 

    Это не даст вам /usr/bin/python . Это даст вам что-то еще, в котором живет интерпретатор python 3. Вы можете либо изменить свою линию shebang на выше, либо заменить путь к интерпретатору python с возвратом пути.

    Попробуйте, which python . Я расскажу вам, какой интерпретатор python используется в вашей среде. Если это не /usr/bin/python как в скрипте, ваше подозрение подтверждается.

    Возможно, вы подозреваете, что линия shebang вызывает более старую версию. Две вещи, которые вы можете проверить:

    1) какая версия является интерпретатором в / usr / bin / python:

     /usr/bin/python -V 

    2) где установлен интерпретатор python 3:

     which python 

    Если вы выберете правильный из командной строки, замените строку shebang следующим:

     #!/usr/bin/env python 

    Добавление. Вы также можете заменить старую версию python символической ссылкой на python 3, но будьте осторожны, что любые крупные обновления OS X (то есть: от 10.5 до 10.5.7) скорее всего нарушат это:

     sudo mv /usr/bin/python /usr/bin/python25 sudo ln -s /path/to/python/3/python /usr/bin/python 

    run 'which python' – если это дает другой ответ, чем / usr / bin / python, замените #! / usr / bin / python таким образом.

    Это может быть немного странно, если скрипт Perl отвечает на вопрос Python, но он работает для Python так же хорошо, как и для Perl. Это скрипт под названием « fixin », что означает «исправить интерпретатор». Он изменяет строку shebang на правильную строку для вашего текущего PATH.

     #!/Users/jleffler/perl/v5.10.0/bin/perl # # @(#)$Id: fixin.pl,v 1.3 2003/03/11 21:20:08 jleffler Exp $ # # FIXIN: from Programming Perl # Usage: fixin [-s] [file ...] # Configuration $does_hashbang = 1; # Kernel recognises #! $verbose = 1; # Verbose by default # Construct list of directories to search. @absdirs = reverse grep(m!^/!, split(/:/, $ENV{'PATH'}, 999)); # Process command line arguments if ($ARGV[0] eq '-s') { shift; $verbose = 0; } die "Usage: $0 [-s] [file ...]\n" unless @ARGV || !-t; @ARGV = '-' unless @ARGV; # Process each file. FILE: foreach $filename (@ARGV) { open(IN, $filename) || ((warn "Can't process $filename: $!\n"), next); $_ = <IN>; next FILE unless /^#!/; # Not a hash/bang file chop($cmd = $_); $cmd =~ s/^#! *//; ($cmd, $arg) = split(' ', $cmd, 2); $cmd =~ s!^.*/!!; # Now look (in reverse) for interpreter in absolute path $found = ''; foreach $dir (@absdirs) { if (-x "$dir/$cmd") { warn "Ignoring $found\n" if $verbose && $found; $found = "$dir/$cmd"; } } # Figure out how to invoke interpreter on this machine if ($found) { warn "Changing $filename to $found\n" if $verbose; if ($does_hashbang) { $_ = "#!$found"; $_ .= ' ' . $arg if $arg ne ''; $_ .= "\n"; } else { $_ = <<EOF; : eval 'exec $found $arg -S \$0 \${1+"\$@"}' if \$running_under_some_shell; EOF } } else { warn "Can't find $cmd in PATH, $filename unchanged\n" if $verbose; next FILE; } # Make new file if necessary if ($filename eq '-') { select(STDOUT); } else { rename($filename, "$filename.bak") || ((warn "Can't modify $filename"), next FILE); open(OUT, ">$filename") || die "Can't create new $filename: $!\n"; ($def, $ino, $mode) = stat IN; $mode = 0755 unless $dev; chmod $mode, $filename; select(OUT); } # Print the new #! line (or the equivalent) and copy the rest of the file. print; while (<IN>) { print; } close IN; close OUT; } 

    Код получен из сценария с тем же именем в оригинальной книге Camel («Перформация программирования Perl», первое издание). С тех пор эта копия немного взломана – и ее нужно взломать еще немного. Но я использую его регулярно – действительно, я просто скопировал его с одного Mac на другой, и, поскольку я не устанавливал Perl 5.10.0 на второй, я запускал:

     $ perl fixin fixin Changing fixin to /usr/bin/perl $ 

    Таким образом, переход от частной установки Perl к стандартному.

    Упражнение для читателя – перепишите скрипт в Python.

    Python - лучший язык программирования в мире.