0

私は lpthw の演習 50 にいます。これはリンクです。
そして、非常に面倒な方法で lpthw.web フレームワークをダウンロードした後。
.py ファイルを作成して演習を続けました。

import web
urls = ('/', 'index')

app = web.application(urls, globals())

class index:
    def GET(self):
        greeting = "Hello World"
        return greeting

if __name__ == "__main__":
    app.run()

しかし、私はこのエラーが発生しました:

Traceback (most recent call last):
    File "bin\app.py", line 1, in <module>
      import web
    File "c:\Python31\lib\site-packages\web\__init__.py", line 14, in <module>
      import utils, db, net, wsgi, http, webapi, httpserver, debugerror
ImportError: No module named utils

何が原因で問題が発生するのか、

lpthw.web をインストールした方法が非常に面倒だと思います (多くのエラーが発生しましたが、複数の方法を何度も試しました。) よろしくお願いします!
誰かが詳細情報を必要とする場合は、編集できるようにコメントしてください。

4

2 に答える 2

4

設定手順を読み忘れていたようです。この学習ガイドはpython3 と互換性がありません。

演習 0: セットアップ

これらの指示にできる限り正確に従う必要があります。たとえば、Mac OSX コンピュータには既に Python 2 がインストールされているため、Python 3 (または任意の Python) をインストールしないでください。

Python 3 ではなく Python 2 をインストールしてください。

初心者向け
の警告 プログラマーは、Python 3 をインストールしてそれを学ばせようとするかもしれません。「あなたのコンピューターのすべての Python コードが Python 3 になったら、私がそれを学ぼうとします」と伝えるべきです。それは彼らを約10年間忙しくさせるはずです。

システムから python3 を削除し、python2.7 をインストールして、推奨パッケージをインストールするときにこのチュートリアルが機能するようにします。

それ以外の場合は、python3 と互換性のあるライブラリの例を使用している別のチュートリアルを見つけてください。現在、すべてが更新されているわけではありません。このため、多くの人が python2.7 にこだわっています。

于 2012-08-10T23:29:45.500 に答える
1

チュートリアルの状態として、またはコマンドラインからeasy_installまたはを使用してインストールを試すことができます。pipeasy_install lpthw.webpip install lpthw.web

application
また、これを適切に参照する必要があることapp = application(urls, globals())
app = web.application(urls, globals())
注意してください。^^^ の部分に注意してください。

また、python micro-web-frameworks に興味がある場合はbottle.pyをお勧めします。インストールする必要はありません。bottle.py

更新
python3 を使用して問題を再現できたので、jdi正しかったです。ここでの問題は、python3 が python2 と下位互換性がないことです。一部の python2 苦情アプリケーションは、python3 で適切に実行されず、その逆も同様です。

この場合、python3 はパッケージ内での相対インポートをサポートしていないようです。このhttp://www.python.org/dev/peps/pep-0328/は興味深いものでした。

ペップから発揮する:

2 番目の問題については、パッケージ相対インポートにアクセスするための特別な構文 (先頭のドット) を使用して、すべてのインポート ステートメントをデフォルトで絶対 (sys.path のみを検索) にすることが提案されています。

そのため、lpthw.web相対パッケージをインポートしようとしますが、単にできません。これがImportError: No module named utils、utils がパッケージ内の相対モジュールであるためです。
ロードできたとしても、import utils取得したパッケージ内にしようとして、他の後方互換性以外の問題に遭遇します。

>>> import utils 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "utils.py", line 75
    except KeyError, k:
               ^
SyntaxError: invalid syntax

これは、この pep http://www.python.org/dev/peps/pep-3110/exceptに関連しており、ステートメントとは異なる構文を示しています。

ご覧のとおり、このパッケージを python3 に移行しようとするのは大きなハードルになるので、開発者に任せたほうがよいでしょう。これは、世の中の多くのパッケージに当てはまります。なぜ python3 は python2 と大きく異なるのですか。彼らは可能な限り言語にパッチを当てたかったので...

当面は python2 に固執しますが、最終的にはほとんどのパッケージが python3 に移行されます。

于 2012-08-10T23:29:07.907 に答える