やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonのimportシステムにうんざりした

ガマンしながら使っていたが限界。

importの問題

  • 循環インポート(相互importするとエラーになり実行不可)
  • 実行ディレクトリに応じてimport文を書き換えねばならない
  • パッケージは名前空間にならない場合があり、そうしないと参照できない場合がある(sys.path, PYTHONPATH指定による参照)
  • 標準ライブラリなどと名前が重複すると使えなくなる(エラーメッセージもない)

規模が大きくなると、ファイルを分割して書きたくなる。しかし、分割するとimport問題にぶちあたる。やがて上記のimport問題を回避しながらの実装が不可能になり、破綻する。GitHubアップローダを書いたときも同様の問題に直面した。

また、以下が苦痛すぎる。

  • import文を書き換えねばならない
    • ディレクトリ名(パッケージ)、ファイル名(モジュール)を変更するたびに
      • 参照する全ファイル対象

規模が大きくなると不都合になる点

ほかにも強いストレスを感じていた点がある。

  • カプセル化できない
    • どこでも代入できるから全体のコードを把握せねばならない
    • メタクラスがあるから構文だけ覚えても不足。全コードを把握せねばならない
  • 完成度が低い
    • 変化が激しい。バージョンごとの差が激しい
    • 名付けに統一性がない
    • 無くていいようなメソッドが多い
    • 無理してクラスの概念に似たものを取り入れているから混乱する
  • 型付けがないから見分けがつかない(パッケージ、モジュール、関数、クラス(型)、変数、メソッド、プロパティ、…)

すべて動的言語の特徴と思われる。使いこなせない自分が悪いのだろうが、コード規模が大きくなると、どうしても無視できない大きな問題になる。

こまかい愚痴

  • エラーがわかりにくい
  • インデントエラーがウザい

なぜPythonを使ったか

requestsライブラリで簡単にWebAPIを叩けるから。

これ以外でPythonを素晴らしいと思えたことはあまりない。

C#4.0でHTTP通信がエラー無く楽にできたらC#に戻りたい。

所感

これまでも何度かこの問題にぶつかった。適当な目安として、50行以上のコードはPythonを使わないほうがいいのではないか。