2013-08-04 82 views
7

Tôi đã cài đặt PyQt5 trên hệ thống win7 của mình (trăn 3.3), sử dụng trình cài đặt được cung cấp từ trang web chính thức của bờ sông.Cách cài đặt PyQt5 trên virtualenv mới và làm việc trên IDLE

Sau đó, tôi tạo một –no-site-packages virtualenv mới, trong đó chỉ những thứ tôi thấy được liệt kê sau khi nhập pip list, là pip (1.4) và các công cụ thiết lập (0.9.7).

Vấn đề bây giờ tuy nhiên, là tôi cần phải cài đặt ở đó hoàn thành PyQt5 quá và điều này dường như không thể sử dụng công cụ pip.

Cả hai pip install sippip install PyQt5 bên trong môi trường ảo đều trả về lỗi.

Ai đó có thể cung cấp hướng dẫn "cách thực hiện" về chính xác tôi nên làm gì?

Tôi cũng muốn để có thể làm việc với PyQt5 đó (của virtualenv mới) từ bên trong một IDLE, vì vậy tôi sao chép thư mục tcl từ quá trình cài đặt toàn cầu của Python tôi đến vị trí của môi trường ảo của tôi và cũng tạo một nhắm mục tiêu phím tắt: {location of my virtual enviroment}\Scripts\pythonw.exe C:\Python33\Lib\idlelib\idle.pyw vì vậy tôi có thể mở ID ảo virtualenv và không phải là ID toàn cục. (Hy vọng tôi đã không làm điều gì sai trái đó ... chỉnh có thể xin vui lòng.)

+1

'đang trả về lỗi' Bạn có nghĩ rằng chính xác lỗi nào sẽ giúp giải quyết vấn đề của bạn? –

+0

Tôi không phải OP, nhưng tôi gặp lỗi 'FileNotFoundError: [Errno 2] Không có tệp hoặc thư mục nào như vậy: '/ home/naught101/.virtualenvs/virtualenv-3/build/sip/setup.py'', khi chạy 'pip install sip'. Không có khiếu nại nào khác. – naught101

Trả lời

10

Both "pip install sip" and "pip install PyQt5" inside the virtual enviroment are returning errors.

Nếu lỗi bạn đang đề cập đến là:

Could not find any downloads that satisfy the requirement [pyqt5|sip]

No distributions at all found for [pyqt5|sip]

Sau đó, answer này sẽ làm sáng tỏ điều này. Về cơ bản, PyPI chỉ cung cấp liên kết đến trang chủ và/hoặc nguồn - không phải là gói hoặc trứng có thể tải xuống. Dưới đây là các liên kết tới các trang PyQt5SIP PyPI. Tôi biết có vẻ lạ rằng một người quản lý gói sẽ không cung cấp các gói, nhưng đó là cách thức của nó.

Bạn sẽ phải tải xuống, biên dịch và cài đặt sip và pyqt5 từ nguồn, bên trong virtualenv của bạn. Tôi ước tôi có thể cung cấp chi tiết nhưng tôi hiện đang làm việc thông qua điều này.

+2

Có thể cài đặt bằng 'pip' các tệp bánh xe có sẵn để tải xuống từ trang tải xuống [PyQt5] (https://www.riverbankcomputing.com/software/pyqt/download5). –

0

Tôi gặp vấn đề tương tự khi cài đặt PyQt5 và SIP. Giải pháp để giải quyết vấn đề này cho PyQt4 như được chỉ định trên Is it possible to add PyQt4/PySide packages on a Virtualenv sandbox? có hiệu quả đối với tôi.

Tôi đã tạo liên kết tượng trưng theo cách thủ công với PyQt5 và sip.so từ trong thư mục virtualenv/site-packages. Một giải pháp xấu xí nhưng làm mọi thứ hoạt động.

3

Làm thế nào tôi có PyQt5 tôi, Python33 Windows7x64 trong một hoạt động virtualenv:

Thứ nhất, đảm bảo bạn đã xuất hiện 64 hoặc 32 bit của tất cả mọi thứ. Tôi đang phát triển trên nền tảng 64bit và đang sử dụng phiên bản 64 bit. Tôi đã không hoàn toàn kiểm tra điều này với 32 bit. Vui lòng đọc kỹ.

  • Cài đặt Python33 x64 bằng cách sử dụng nhị phân trình cài đặt Windows.
  • Cài đặt PyQt5 x64 từ bờ sông bằng trình cài đặt MSI vào mặc định Python33. PIP sẽ không hoạt động.
  • Tạo virtualenv bằng cách sử dụng Python33 làm cơ sở của bạn, không có gói trang web.
  • Sao chép thư mục PyQt5 từ Python33/Lib/site-packages/vào gói virtualenv/Lib/site-của bạn.
  • KHÔNG XÓA thư mục PyQT5!

Đảm bảo PyQt5 đang làm việc trên cơ sở Python33 cài đặt:

from PyQt5 import QtCore, QtGui, QtWidgets 

Tạo một cửa sổ chính và khởi động nó. Nếu thử nghiệm với mã PyQt4, một vài lớp đã được hoán đổi xung quanh. (Trong QtGui và QtWidgets ví dụ)

từ PyQt5 nhập khẩu QtGui, QtWidgets, QtCore

class Main(QtWidgets.QMainWindow): 

def __init__(self): 
    print("Main __init__ fired") 
    QtWidgets.QMainWindow.__init__(self) 

    #Setup the UI 
    print("Setting up UI") 
    self.ui = Ui_MainWindow() 
    self.ui.setupUi(self) 

def main(): 
    print("fired main()") 

    #Setup the main application object 
    app = QtWidgets.QApplication(sys.argv) 

    window = Main() 
    window.show() 

    sys.exit(app.exec_()) 

#Run GUI 
if __name__ == "__main__": 
    main() 

Nếu bạn nhận được lỗi này "..failed để bắt đầu, không thể tìm thấy hoặc tải các nền tảng Qt Plugin" cửa sổ." (hoặc tương tự), bạn phải cập nhật DirectX của bạn. làm điều này thông qua Microsoft.

Một khi bạn đã hoàn toàn chắc chắn PyQt5 đang làm việc trong windows, sau đó tiếp tục.

  • Kích hoạt virtualenv nơi bạn đã sao chép thư mục PyQt5 sang
  • Đảm bảo PyQt5 có thể được nhập từ bên trong virtualenv của bạn. Bạn có thể cần phải thao tác các đường dẫn tùy thuộc vào IDE bạn đang sử dụng. Chạy nhập khẩu virtualenv bạn

    từ PyQt5 nhập khẩu QtCore, QtGui, QtWidgets

  • Cố gắng chạy các ứng dụng tương tự một lần nữa từ bên trong virtualenv này

OH NO! Một lỗi khác với dlls! Điều gì mang lại? Các đường dẫn đến các thư viện dll QT là sai bên trong virtualenv. Nó xảy ra ngay cả khi bạn nói PyQt5 để cài đặt trực tiếp vào virtualenv của bạn. Bạn PHẢI thêm đường dẫn vào thư việnPaths trước khi tạo đối tượng QApplication. Dưới đây là một giải pháp (Thay venv với đường virtualenv bạn):

def main(): 
    print("fired main()") 

    #ADD THE FOLLOWING BEFORE CREATING A QApplication() 
    QtCore.QCoreApplication.setLibraryPaths(['C:/venv/Lib/site-packages/PyQt5/plugins']) 

    #Ensure path was added and correct 
    print(QtCore.QCoreApplication.libraryPaths()) 

    #Setup the main application object 
    app = QtWidgets.QApplication(sys.argv) 

    #See what the paths were 
    print(app.libraryPaths()) 

    window = Main() 
    window.show() 

    sys.exit(app.exec_()) 

Bây giờ mã nên chạy từ tất cả các bên trong virtualenv của bạn. Bạn có thể xóa thư mục PyQt5 khỏi bản cài đặt cơ sở của mình hoặc chuyển thư mục đó sang địa điểm khác nếu bạn cần trong tương lai.

Có nhiều khả năng là cách để lồng vào đường dẫn theo cách tương đối, nhưng điều này có thể tạo ra sự cố với sự cố đóng băng. Nói về mà.

Bây giờ bạn đã hoàn tất và bạn sẽ chuyển sang ứng dụng PyQt5 của bạn thành một ứng dụng tuyệt vời. Bạn hãy chạy nó và OH NO! nhiều sự cố dll.

Bạn có thể sao chép thủ công libEGL.dll từ gói trang web/PyQt5 vào thư mục gốc của ứng dụng hoặc thêm các dòng sau vào thiết lập của bạn.tập tin py cho cx-đóng băng:

import sys 

from cx_Freeze import setup, Executable 

#ADD THIS MUST INCLUDE FOR Windows 7. 
include_files = [('c:/venv/Lib/site-packages/PyQt5/libEGL.dll', 'libEGL.dll')] 

setup(
    name="My App", 
    version="0.1", 
    description="PyQt5 App.", 

    #ADD THIS 
    options={'build_exe': {'include_files': include_files}}, 

    executables=[Executable("c:/venv/src/myApp_main.py", 
          base="Win32GUI", 
          targetName="MyApp.exe")]) 
1

Giả sử bạn có PyQt5 cài đặt trên toàn thế giới, có một cách bạn có thể cho truy cập virtualenv của bạn để nó mà không sử dụng --system-site-packages. Một gói gọi là vext làm cho nó có thể. Nó cũng làm việc với các gói khác, nhưng trong trường hợp này chúng ta sẽ chỉ thiết lập hỗ trợ PyQt5.

Chạy lệnh sau từ bên trong virtualenv của bạn và bạn sẽ được tốt để đi:

pip install vext.pyqt5 

Để kiểm tra tình trạng, chạy vext -l. Bạn sẽ thấy một cái gì đó như sau:

Running in virtualenv [enabled] 
pyqt5.vext 

Hoặc, chạy vext -c pyqt5.vext. Bạn sẽ thấy một cái gì đó như sau:

import sip: [success] 
import PyQt5: [success] 

Hoặc bạn chỉ có thể thử nhập PyQt5, ví dụ: python -c 'import PyQt5'.

+0

Đây là phương pháp sạch nhất. Trên mac, bạn có thể aswel symlink libs thành virtualenv. – Akelian

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