python2.7系で書かれたプログラムをpython3で動かす時のハマり箇所

数値計算を勉強しようと思って調べていたら、pythonで書かれたソースを見つけました。

ここまでは良いのですが、python3では動かない。

あるあるだと思いますが、python初心者がつまづいた点を残しておきます。

python2.7のpipが動かない

とりあえず、Debian unstableだとpytho3がメインで、pipは3のみのようです。

% pip -V                  
pip 20.1.1 from /usr/lib/python3/dist-packages/pip (python 3.9)

じゃあ、野良で入れるかと思って、get-pip.pyをダウンロードして試してみましたが…。

% sudo python2.7 ./get-pip.py   
[sudo] password for XXXX: 
Traceback (most recent call last):
  File "./get-pip.py", line 24244, in 
    main()
  File "./get-pip.py", line 199, in main
    bootstrap(tmpdir=tmpdir)
  File "./get-pip.py", line 82, in bootstrap
    from pip._internal.cli.main import main as pip_entry_point
  File "/tmp/tmpXTY6Z_/pip.zip/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax

とget-pip.pyが2.7だと動かない。つまり2.7系ではpipが入らない。

あまりpythonでがんばる気はないので、ここはあっさり諦めました。

では気をとりなおして、3系で動かしてみると次の2点でハマる:

print

printは3系では()で括る必要があります。

xrange

これもあるある(らしい)。

xrangeは廃止されrangeを使う。

おわりに

とまぁ、2点直せばひとまず動きました。

ただ肝心のプログラムの一部はうまく動かないみたい。 そもそも配列が空っぽの結果を返す関数がある。要調査ですな。

Rubyに慣れた身としては、pythonがこんなに普及している理由がよく分かりませんね。

最初はわけも分からずanacondaを入れてしまったり、あまりお行儀が良いとは思えない環境構築で正直混乱しました。 こういったインストール関係も一癖ある気がします。

文法はインデントの癖を受け入れれば、ほかはRubyに近い部分はありそうです。 個人的には区切りはendで括るほうが好きですね。