2012-01-30 39 views
35

Vì vậy, tôi đang cố gắng chạy một ví dụ matplotlib đơn giản trong virtualenv của tôi (trong bảng điều khiển). Dưới đây là các mã:Cài đặt PyGtk trong virtualenv

import matplotlib 
matplotlib.use('GTKAgg') 
import matplotlib.pyplot as plt 
radius = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] 
area = [3.14159, 12.56636, 28.27431, 50.26544, 78.53975, 113.09724] 
plt.plot(radius, area) 
plt.show() 

Tuy nhiên, khi tôi chạy này, tôi nhận được:

ImportError: Gtk* backend requires pygtk to be installed.

Và bây giờ những niềm vui bắt đầu. Tôi cố gắng để cài đặt pip pygtk nhưng nó ném:

******************************************************************** 
* Building PyGTK using distutils is only supported on windows. * 
* To build PyGTK in a supported way, read the INSTALL file. * 
******************************************************************** 
Complete output from command python setup.py egg_info: 
******************************************************************** 

Tôi đã kiểm tra các tập tin INSTALL và nói thử ./configfure; make; make install. Tuy nhiên. Tôi không hoàn toàn chắc chắn làm thế nào để làm điều này trong virtualenv. Tôi phải giải nén các nguồn cho pygtk để được cài đặt trong virtualenv ở đâu?

+0

Nơi bạn giải nén không quan trọng nếu bạn có virtualenv khi bạn cài đặt. –

+0

Ok, vì vậy khi tôi cố cài đặt pygtk bằng pip, tôi đã nhận được thông điệp mà tôi đã đề cập trước đó. Sau đó, tôi đã đi đến thư mục xây dựng và có một thư mục pygtk. Tôi đã làm các bước được giải thích trong tập tin INSTALL và mọi thứ hoạt động tốt. Tuy nhiên, khi tôi cố gắng để chạy mã của tôi nó phàn nàn về pygtk không được cài đặt. Tôi không hiểu. Tôi đang làm gì sai? –

+0

Tại sao không chỉ sử dụng một chương trình phụ trợ khác? – ptomato

Trả lời

15

Bí quyết là đặt thủ công đường dẫn chính xác và sau đó chạy cấu hình bên trong virtualenv. nó làm việc cho tôi

Cài đặt python-config trong env ảo và liên kết nó với python2.7-config:.

pip install config 
ln -s /home/PATH/TO/VIRT/bin/python-config /home/PATH/TO/VIRT/bin/python2.7-config 

Cài đặt cairo trong env ảo:

wget http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2 
tar -xf py2cairo-1.10.0.tar.bz2 
cd py2cairo-1.10.0 
./waf configure --prefix=/home/PATH/TO/VIRT/ 
./waf build 
./waf install 

Cài đặt PyGTK

wget http://pypi.python.org/packages/source/P/PyGTK/pygtk-2.24.0.tar.bz2 
tar -xf pygtk-2.24.0.tar.bz2 
cd pygtk-2.24.0 
export PKG_CONFIG_PATH=/home/PATH/TO/VIRT/lib/pkgconfig 
./configure --prefix=/home/PATH/TO/VIRT/ 
make 
make install 

Và điều đó nên thực hiện. Chỉ cần thay thế PATH/TO/VIRT/bằng con đường của riêng bạn. Tôi chắc rằng ai đó có thể hỗ trợ thêm đường dẫn đến virtualenvwrapper?

+2

Bây giờ bạn phải xây dựng và cài đặt pygobject một cách riêng biệt là tốt, rõ ràng. Bản thân tôi đã không quản lý để làm điều này thành công. –

+1

Tôi đã có thể cài đặt nó theo các bước của tập lệnh tại (https://gist.github.com/ches/1094799), nhưng 'import matplotlib.pyplot' vẫn cho rằng pygtk chưa được cài đặt. – ninly

+1

Tôi đã thực hiện tất cả điều này thành công, nhưng tôi vẫn gặp lỗi như "Chương trình phụ trợ Nhập khẩu: Gtk * yêu cầu cài đặt pygtk." – Mala

0

Trải nghiệm của tôi (chỉ trên các hệ thống Posix) đã được rằng một số gói không thể được cài đặt trong virtualenv (Tôi nghĩ rằng đó là vì chúng cần phải biên dịch bản thân, v.v.). Đôi khi chúng có thể được cài đặt trong gói cá nhân sau đó.

Một cách bạn có thể xử lý tình huống này là biên dịch và cài đặt gói ở một nơi khác và sau đó định cấu hình virtualenv để tải gói đó bằng cách thêm đường dẫn gói trang web. Hãy xem documentation để biết thêm. (hoặc thiết lập kịch bản lệnh tăng cường thay đổi đường dẫn môi trường mỗi khi bạn kích hoạt môi trường của mình (dễ dàng thực hiện với virtualenvwrapper

0

Tôi có cùng một vấn đề, nhưng tôi cố định nó bằng cách cài đặt gói debian python-gtk2

6

pygtk không thể được cài đặt trong virtualenv của bạn từ PyPI, vì vậy

pip install pygtk 

sẽ tải về nhưng không cài đặt. Bạn có thể đi qua các hoops tải về các tập tin tar và biên dịch và cài đặt đó, nhưng nếu nó là OK để tạo liên kết đến các gói liên quan được cài đặt trong hệ thống sau đó kích hoạt virtualenv của bạn và cài đặt ruamel.venvgtk là đủ:

pip install ruamel.venvgtk 

Đây là một plug shameless cho công việc của riêng tôi, không có giải pháp nào khác ở đây hoạt động tốt với việc tạo lại virtualenv lặp lại như là ví dụ được thực hiện bởi tox.

Trong setup.py các gói sau đây sẽ xảy ra:

try: 
    import gtk 
except ImportError: 
    print('--------------') 
    import subprocess 
    instdir = subprocess.check_output([ 
     '/usr/bin/python', 
     '-c', 
     'import os, pygtk; print os.path.dirname(pygtk.__file__)', 
    ]).strip() 
    for dst_base in sys.path: 
     if dst_base.strip(): 
      break 
    for d in [ 
     'pygtk.pth', 
     'pygtk.py', 
     'gtk-2.0', 
     'gobject', 
     'glib', 
     'cairo', 
     ]: 
     src = os.path.join(instdir, d) 
     dst = os.path.join(dst_base, d) 
     if os.path.exists(src) and not os.path.exists(dst): 
      print('linking', d, 'to', dst_base) 
      os.symlink(src, dst) 

tức python của hệ thống được hỏi nơi pygtk được cài đặt (trên Linux Mint 17,1 đây là /usr/lib/python2.7/dist-packages), và sau đó liên kết được thiết lập để là người đầu tiên đường dẫn (đó là chiều dài khác 0) cho python được kích hoạt.

+0

Vì vậy, tôi chắc chắn chỉ cần cài đặt này và nó có vẻ là làm việc cho đến nay, sẽ cung cấp cho nó thử nghiệm axit bây giờ Anthon, và nếu nó thực sự giúp với công việc dev của tôi, bệnh def upvote! –

+1

Điều này dường như chỉ hoạt động với python hệ thống là/usr/bin/python nhưng không thành công với bất kỳ python nào khác (ví dụ,/opt/local/bin/python): ( –

7

Tôi đã làm điều này

sudo apt-get install python-gtk2

tôi thấy rằng nó đã được cài đặt trên một số điều tra, tôi phát hiện ra rằng khi tôi tạo ra một môi trường ảo, nó đã mất tích một số liên kết vì vậy tôi đã xem qua bài viết này: Virtualenv on Ubuntu with no site-packages .

Tôi đọc nó và phù hợp các lệnh được cung cấp để thiết lập của tôi như sau:

  1. Đầu tiên tôi đã thay đổi vào virtualenv tôi và kích hoạt nó bằng cách

    source bin/activate 
    
  2. Sau đó, tôi đã thay đổi vào thư mục lib/python2.7 thư mục bên trong virtualenv của tôi:

    cd lib/python2.7 
    
  3. Tôi sau đó cũ ecuted các lệnh sau đây.

    $ ln -s /usr/lib/python2.7/dist-packages/cairo/ 
    $ ln -s /usr/lib/python2.7/dist-packages/pygtk.py 
    $ ln -s /usr/lib/python2.7/dist-packages/pygtk.pth 
    $ ln -s /usr/lib/python2.7/dist-packages/gtk-2.0/ 
    
  4. Cuối cùng, để kiểm tra tôi gõ 'trăn', và thực hiện:

    >>> import pygtk 
    

    Nó đã cho tôi không có lỗi, và do đó tôi biết nó bây giờ đã có trong env ảo của tôi.

Tôi đang sử dụng Ubuntu 14.04 (64 bit) trên intel Core i5.

+2

Tác phẩm này và tôi nghĩ đó là câu trả lời phù hợp) Tôi cũng phải làm 'ln -s/usr/lib/python2.7/dist-gói/gobject /', 'ln -s/usr/lib/python2.7/dist-packages/gobject /' , 'ln -s /usr/lib/python2.7/dist-packages/glib' để sử dụng 'view' từ' ase.visualize', mặc dù các gói này có thể được cài đặt theo cách thông thường. –

Các vấn đề liên quan