1

Sublime Text 3 に SublimeREPL をインストールしましたが、うまく機能しています。_socketただし、 urllib2 や urllib などを使用するモジュールをインポートしようとすると、ImportError が返されます。os.path を実行して、パスが正しいことを確認しました。また、SublimeREPL ではなく、python コマンド ラインからでも問題なく動作します。

>>> import urllib2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "E:\Python27\lib\urllib2.py", line 94, in <module>
    import httplib
  File "E:\Python27\lib\httplib.py", line 71, in <module>
    import socket
  File "E:\Python27\lib\socket.py", line 47, in <module>
    import _socket
ImportError: DLL load failed: %1 is not a valid Win32 application.
4

2 に答える 2

2

ほとんどの場合、Python インストールが混在しています。つまり、64 ビットの Python を使用して SublimeREPL を使用していますが、同じマシンに 32 ビットの Python もPYTHONPATH使用しており、32 ビットの Python のライブラリの代わりに、または先に、32 ビットの Python のライブラリを指すように構成されています。自分の。

または、さらに悪いことに、両方の Python を同じディレクトリにインストールし、一部が 64 ビットで一部が 32 ビットの 1 つのインストールしかありません。(その場合、コマンド ラインから Python を使用しても同じエラーが発生します。)

ネイティブ Python と Cygwin Python、CPython と IronPython、場合によっては異なるフラグでコンパイルされた 2 つのビルド、または 2 つの異なる XY バージョンが混在している場合にも、この問題が発生する可能性がありますが、32 ビットと 64 ビットが最も一般的な理由です。

それ自体が読み込まれる理由urllib2は、Python 2.7 ソースが Python 2.7 ソース コードであるためです。それがどのビルドから来たかは問題ではありません。ただし、DLL にコンパイルされた C 拡張機能は、特定の Python インタープリターに対してコンパイルされ、そのインタープリターでのみ機能します。Windows DLL ローダーが Python の処理を​​拒否していなければ、すぐに別のエラーが発生するだけです。

私たちがそれに取り組んでいる間、Python はこの場合のエラー処理を 3.3 あたりで改善し、何が起こっているかをもう少し簡単に判断できるようにしましたが、もちろん 2.7 に固執すると、新しい機能は得られません。


Python の内部から、32 ビットまたは 64 ビットのインタープリターを使用しているかどうかを確認する最も簡単な方法は、sys.getmaxsize. 約 20 億または 40 億の場合は 32 ビットです。約 9 または 18 桁が多すぎて 10 億を数える場合、あなたは 64 ビットです。

DLL が 32 ビットか 64 ビットかを確認することは、宇宙の他のどのプラットフォームよりも Windows で明らかに困難です。詳細については、この質問またはこの質問を参照してください。

于 2014-08-03T07:33:58.310 に答える
0

私は同じ問題に遭遇しました。SublimeText 3 64ビットの使用とSublimeREPL用の32ビットPython 3の使用に関係しているのではないかと思いました。

Python 3 32 ビットをアンインストールし、64 ビットの Python 3 をインストールしましたが、バージョンの不一致に関する新しいエラーが表示されました。私は Python 3.4 をインストールしており、SublimeText の現在のバージョンには Python 3.3 がバンドルされています。

そこで、バンドルされている SublimeText 3 (Build 3083) の python に合わせて Python 3.3 64bit をインストールしたところ、ようやく動作しました。これは、Sublime Text の REPL タブ内からのものです。

Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>> 
于 2015-04-08T08:32:28.580 に答える