web-dev-qa-db-ja.com

シンボルが見つかりません:__PyCodecInfo_GetIncrementalDecoder

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

73
orome

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の奇妙な組み合わせが呼び出されますか?

199
Stuart Berg

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を試行し、成功した場合は、同じパスからロードされたかどうかを確認します。

21
ivan_pozdeev

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"
11
Noel Ruault

同じ問題がありましたが、_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に置き換えます。

6
Yanan

これはMacVimでも起こりました。 :python print(sys.path)system Pythonを使用していることを確認して解決しました(例:/Library/Python/2.7/...

Homebrew経由でMacVimをインストールしたので、次の方法でそれを行いました。

  1. which python-> /usr/bin/pythonを持つ新しいシェルを作成します。私の場合、.bash_profileからpyenv行を削除する必要がありました。 Homebrew経由でPythonをインストールした場合、最初にbrew unlink python

  2. brew reinstall macvim

3
kizzx2

Python 2.7.10に固執することを気にしない場合の別の簡単な回避策は、virtualenvに使用されるPythonインタープリター実行可能ファイルのパスを指定することです。 OSXでは、そのパスは通常/usr/bin/pythonです。

virtualenv venv --python=/usr/bin/python
3
skeller88

問題の原因がanacondaである場合、//anacondaディレクトリを削除する必要はありません。

~/.bash_profileを開いて、次の行を見つけます。

export PATH="//anaconda/bin:$PATH

コメントアウトしてから、ターミナルセッションを再起動します。

2
Will

NLTKのダウンロードに失敗した後にこのエラーが発生しました。anacondaをアンインストールする必要がありました。

Sudo rm -rf ~/anaconda 
update PATH variable
1
user260826

コメント(?)を追加できないので、これは私の経験を共有するためだけです。

1
tngn

これは、フォルダーにvenvを作成しようとして、誤って2番目のvenvを初期化しようとしたときに発生しました!だから私はちょうどvenvディレクトリを削除し、コマンドを再実行しました。おそらく、これはこの解決策の答えではありませんが、私のエラーを検索するとここに来たので、立ち往生している他の人の助けになるかもしれません。

0
Ethan Keller

PyCharmを使用しようとしたときに同じ問題が発生しました。プロジェクト構成で「pythonインタープリター」を設定して、使用したいpython仮想環境(Anaconda環境)を指すように解決しました。どういうわけか、インタプリタパスには〜/.../ anaconda /.../_ io.soの「anaconda」部分がありませんでした。 anacondaをアンインストールする必要はありません。

0
Kai

/usr/local/binにあるシンボリックリンクを削除し、そのリンクが指す実際のpythonバイナリをコピーすることで、この問題を解決しました。

0
Chris Goy