Homebrew Python 2.7.11(2.7.10から)から更新してから、PyCharm IDEコンソールからPyPiにパッケージをテスト登録することができなくなりました。
実行中(「外部ツール」として)
python -B setup.py register -r pypitest
私は今得る
Traceback (most recent call last):
File "setup.py", line 22, in <module>
from setuptools import setup
File "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 12, in <module>
from setuptools.extension import Extension
File "/usr/local/lib/python2.7/site-packages/setuptools/extension.py", line 8, in <module>
from .dist import _get_unpatched
File "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", line 16, in <module>
from setuptools.depends import Require
File "/usr/local/lib/python2.7/site-packages/setuptools/depends.py", line 6, in <module>
from setuptools import compat
File "/usr/local/lib/python2.7/site-packages/setuptools/compat.py", line 17, in <module>
import httplib
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 80, in <module>
import mimetools
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/mimetools.py", line 6, in <module>
import tempfile
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/tempfile.py", line 32, in <module>
import io as _io
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: dlopen(/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder
Referenced from: /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Expected in: flat namespace
in /usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Process finished with exit code 1
どうすればいいかわかりません。 IDEのコンソール内から実行した場合にのみ、この問題が発生します。システムコマンドライン(OS Xのターミナル)で直接行う場合、問題はありません。
OS X 10.11.3; Homebrew Python 2.7.11; PyCharm 5.0.3
tl; dr:次のいずれかを実行して、この問題を修正します:
hash -r python
、またはEDIT:私の 関連する質問 への答えは、ここで何が起こっているかを明確にします。 Pythonの新しいバージョンをインストールするとき、hash -r python
を実行して、bashに「キャッシュされた」場所をpython
実行可能ファイルにリセットするように指示する必要があります。
私の場合、$PATH
の/usr/local/bin/python
にあるpython
と入力していました。しかし、bash
はまだ古いキャッシュロケーション/usr/bin/python
を使用していました。そのため、古い実行可能ファイルが呼び出されましたが、newパスがsys.argv[0]
のpythonに提供されました。これは、古い実行可能ファイルが実行されていたことを意味しますが、新しいsys.executable
値により、すべての間違ったモジュール(io
モジュールを含む)がロードされました。
私は同じ問題を抱えています。 Python.orgのインストーラーを使用してpython 2.7.11をインストールしました。奇妙なことに、この問題は、フルパスを使用してシェルから起動するときのOSXがpython
を起動する方法と、Word python
を使用する方法との微妙な違いに関連しているようです。
だから、私にとっては、これは機能します(フルパス/usr/local/bin/python
を介してpythonを呼び出す):
$ which python
/usr/local/bin/python
$ /usr/local/bin/python -c "import io"
$
...しかし、これはしません:
$ python -c "import io"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/io.py", line 51, in <module>
import _io
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so, 2): Symbol not found: __PyCodecInfo_GetIncrementalDecoder
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
回避策として、同じことを試してみてください。
他にも、この不可解な動作について 個別の質問 を投稿しました。たぶん、単にpython
を呼び出すだけで、2.7.11実行可能ファイルと2.7.10 dylibの奇妙な組み合わせが呼び出されますか?
https://github.com/klen/python-mode/issues/634 によると:
私は同じ問題を抱えていましたが、正常に修正されました。私の場合、PYTHON_PATHが指定され、開発環境の1つに設定され、ioを含むいくつかのライブラリもある場合、homebrewでpythonとvimをコンパイルしました。回避策は簡単でした。新しいターミナルを開き、カスタムPYTHON_PATHがないことを確認し、Pythonをアンインストールし、vimをアンインストールします。両方を再インストールします。
そして
問題が解決しました。
Culpritは、python 2.7.10から2.7.11への更新です。
Condaパッケージコントロールを使用している場合は、「conda install python = 2.7.10」を実行するだけでこの問題を解決できます。
しかし、これは根本的な原因を与えるものではありません。これは_io
で発生するため、これはpython 2.7.11のバグのように見えます(世界規模の大声で叫ばれ、プロンプトが修正された場合は修正されます)。バージョン(および、おそらくいくつかの関連バージョンも)。
コンソールでimport _io
を試行し、成功した場合は、同じパスからロードされたかどうかを確認します。
Pythonを再インストールします。
brew unlink python && brew reinstall python
パスを確保する
export PYTHONPATH=$PYTHONPATH:/usr/local/bin/
BACKUPおよび「パス」ファイルの順序を変更します。
Sudo nano /etc/paths
パスの順序は、pythonを適切に実行することが重要だと思われます。私の場合、結果は次のとおりです。
#Sudo nano /etc/paths
/usr/bin
/usr/local/bin
/bin
/usr/sbin
/sbin
私のMacでは、パスはこのようなものです。
$ which python
/usr/local/bin/python
これで両方を実行できます:
$ /usr/local/bin/python -c "import io"
$ python -c "import io"
同じ問題がありましたが、_io.soファイルを置き換えるだけで問題は解決します。
Sudo find / -name _io.so
DOES NOT python-2.7.11に属する_io.so
ファイルのパスをコピーしますたとえば、python-2.7.5の下にある_io.soのパスをコピーします。/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib- dynload/_io.so
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/_io.so
ファイルを、見つけた_io.so
に置き換えます。
これはMacVimでも起こりました。 :python print(sys.path)
がsystem Pythonを使用していることを確認して解決しました(例:/Library/Python/2.7/...
)
Homebrew経由でMacVimをインストールしたので、次の方法でそれを行いました。
which python
-> /usr/bin/python
を持つ新しいシェルを作成します。私の場合、.bash_profile
からpyenv
行を削除する必要がありました。 Homebrew経由でPythonをインストールした場合、最初にbrew unlink python
brew reinstall macvim
Python 2.7.10に固執することを気にしない場合の別の簡単な回避策は、virtualenvに使用されるPythonインタープリター実行可能ファイルのパスを指定することです。 OSXでは、そのパスは通常/usr/bin/python
です。
virtualenv venv --python=/usr/bin/python
問題の原因がanaconda
である場合、//anaconda
ディレクトリを削除する必要はありません。
~/.bash_profile
を開いて、次の行を見つけます。
export PATH="//anaconda/bin:$PATH
コメントアウトしてから、ターミナルセッションを再起動します。
NLTKのダウンロードに失敗した後にこのエラーが発生しました。anacondaをアンインストールする必要がありました。
Sudo rm -rf ~/anaconda
update PATH variable
コメント(?)を追加できないので、これは私の経験を共有するためだけです。
これは、フォルダーにvenvを作成しようとして、誤って2番目のvenvを初期化しようとしたときに発生しました!だから私はちょうどvenvディレクトリを削除し、コマンドを再実行しました。おそらく、これはこの解決策の答えではありませんが、私のエラーを検索するとここに来たので、立ち往生している他の人の助けになるかもしれません。
PyCharmを使用しようとしたときに同じ問題が発生しました。プロジェクト構成で「pythonインタープリター」を設定して、使用したいpython仮想環境(Anaconda環境)を指すように解決しました。どういうわけか、インタプリタパスには〜/.../ anaconda /.../_ io.soの「anaconda」部分がありませんでした。 anacondaをアンインストールする必要はありません。
/usr/local/bin
にあるシンボリックリンクを削除し、そのリンクが指す実際のpythonバイナリをコピーすることで、この問題を解決しました。