4

「virtualenv」の PyGTK で奇妙な問題が発生しています。gtk は私の virtualenv にはインポートされませんが、私のグローバル python インストールにはインポートされます。(先週、この特定の問題は発生していませんでした。ソフトウェアの更新が何かを混乱させたと推測しています。)

この動作を解決する良い方法はありますか?

ここに示されています: gtk をグローバルにインポートし、

tom@zeppelin:~$ python
Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
>>> gtk
<module 'gtk' from '/usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.pyc'>

gtkのインポートに失敗し、

tom@zeppelin:~$ workon py27
(py27)tom@zeppelin:~$ python
Python 2.7.1+ (r271:86832, Sep 27 2012, 21:12:17) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gtk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named gtk

残念ながら、これは私の ipython --pylab 環境を壊しました: http://pastebin.com/mM0ur7Hc

更新:grepic/このスレッドで提案されているように、シンボリックリンクを追加することでこれを修正できました: Python: virtualenv - gtk-2.0

小さな違いがあります。つまり、私の「カイロ」パッケージは/usr/lib/pymodules/python2.7/cairo/ではなく にありました/usr/lib/python2.7/dist-packages/cairo

venv/bin/activate2 番目の更新:次の行を my に追加すると便利であることがわかりました。

export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages
export PYTHONPATH=$PYTHONPATH:/home/tom/.virtualenvs/py27/lib/python2.7/dist-packages/gtk-2.0
export PYTHONPATH=$PYTHONPATH:/usr/lib/pymodules/python2.7/gtk-2.0

(これらのうちの 1 つまたは複数は不必要であると思われますが、これを長い間いじっていたので、調査をやめることにしました。セットアップが機能するようになったので満足しています。)

問題が解決しました!みんな、ありがとう。

4

5 に答える 5

13

--system-site-packages フラグを使用して仮想環境を作成してみてください。

于 2012-10-28T11:23:01.900 に答える
4

したがって、gtk は通常、グローバル環境の Python パスにある /usr/lib/python2.7/dist-packages のような場所にありますが、仮想環境にはありません。

次のような方法で gtk へのパスを手動で追加することもできます。

import sys
sys.path.append("/usr/lib/python2.7/dist-packages/gtk")

仮想環境をアクティブ化するときにパスを変更することもできます。venv/bin/activate を開きます。恐ろしく見えるファイルですが、最後に次のように記述できます。

export PATH=$PATH:/my/custom/path

それを保存し、次に仮想環境をアクティブ化するときに次を使用します。

source venv/bin/activate

カスタムパスはパスになります。これを確認するには

echo $PATH

別のアプローチとしてPython: virtualenv - gtk-2.0が提案されましたが、virtualenv ディレクトリに移動して「dist-packages」ディレクトリを追加し、以前使用していた gtk パッケージへのシンボリック リンクを作成することです。

mkdir -p venv/lib/python2.7/dist-packages/
cd venv/lib/python2.7/dist-packages/

GTK2 の場合:

ln -s /usr/lib/python2.7/dist-packages/glib/ glib
ln -s /usr/lib/python2.7/dist-packages/gobject/ gobject
ln -s /usr/lib/python2.7/dist-packages/gtk-2.0* gtk-2.0
ln -s /usr/lib/python2.7/dist-packages/pygtk.pth pygtk.pth
ln -s /usr/lib/python2.7/dist-packages/cairo cairo

GTK3 の場合:

ln -s /usr/lib/python2.7/dist-packages/gi gi

完全な開示:これらのソリューションはどちらもややハック的だと思いますが、質問が緊急であるとあなたが言っていることを考えると、それは問題ありません。仮想環境を拡張する「適切な」方法がおそらくあるので、最終的により良い解決策を見つけたらお知らせください。http://www.virtualenv.org/en/latest/index.html#creating-your-own-bootstrap-scriptsで運が良いかもしれません

于 2012-10-11T02:16:02.513 に答える