5

私は古い Django プロジェクト (Django バージョン 1.3.2、Python バージョン 2.6.6) に取り組んでいました。「python manage.py runserver」を実行すると、「ImportError: cannot import name urandom」というメッセージが表示されます。

オンラインで検索すると、virtualenv を再実行して問題を解決することに関する一連の結果が返されます。virtualenvをインストールしたことがなく、以前は機能していたので、これは意味がありません...したがって、pythonのインストールに問題があるに違いないと考えました。

Django のインストール ガイドに従って、Djangoを削除して再インストールすることにしました。

pip install Django

django-admin.py startproject project実行すると、同じ ImportError が発生します。そこで、を使用してDjangoを再度アンインストールしpip uninstall Djangoました。

実行pythonするとpython2.6.6シェルが起動し、入力from os import urandomすると「ImportError:名前urandomをインポートできません」というメッセージが表示されますが、同じことをpython2.7してもそのようなエラーは発生しません。

何が起きてる?私のpython2.6.6を壊しているのは何ですか?

4

1 に答える 1

0

多くの有用なコメントが利用可能であるという情報をこれ以上提供できるかどうかはわかりませんが、この失敗の考えられる理由を以下に示します。

  1. お使いの OS は、Python 2.6.6 に適切に urandom を提供しなくなりました。/dev/urandom が存在しない場合に "import random" を使用した OSError がここでわかることから、これは (ImportError ではなく) OSError または NotImplementedError になるはずですが、以前はドキュメントが間違っていました。システムの urandom に到達できるかどうかを確認する適切な方法は、次を実行することです。

    from posix import urandom
    

    それでもうまくいかない場合は、次を試してください。

    from os import O_RDONLY
    aURandom = open("/dev/urandom", O_RDONLY)
    

    どちらも機能しない場合は、おそらくシステム機能に到達できないことに対処している可能性があります。それはおそらく、OSのセットアップが何らかの形で責任を負っていることを意味します. Python が期待する Ubuntu インストール (/dev/urandom) で urandom が実際に利用可能かどうかを実際に確認することをお勧めします。Python 2.7 のバージョンも urandom へのアクセスに失敗している可能性がありますが、クラッシュする代わりにサイレントに失敗しています。

  2. 上記のコード スニペットが機能する場合は、os.py ファイルまたはそのコンパイル済みバージョンが台無しになっています。その場合、Python のインストールが壊れています。それをアンインストールし、中間のpycまたはpyoファイルをすべてクリアしてから、再インストールする必要があります。

Python 2.6.6 インタープリターが独自に urandom を見つけることができないことを考えると、Django が問題になる可能性は低いです。

于 2013-02-14T04:20:07.070 に答える