هل من الممكن إضافة حزم pyqt4/pyside على صندوق رمل افتراضي؟

StackOverflow https://stackoverflow.com/questions/1961997

سؤال

أنا استخدم VirtualEnv مع الربح على بيئة التنمية الخاصة بي مع web.py, simplejson وغيرها من الحزم الموجهة نحو الويب.
سأقوم بتطوير عميل Python بسيط باستخدام QT لإعادة استخدام بعض API المطورة باستخدام Web.py.

هل قام أي شخص هنا بتثبيت PYQT4 بشكل ناجح مع VirtualEnV؟
هل هو ممكن؟

لقد قمت بتنزيل جميع الثنائيات PyQt4 تم تثبيته عالميًا على دليل Python2.6 الخاص بي.
إذا لم أستخدم --no-site--packages الخيار ، يتضمن VirtualEnv بشكل صحيح PyQt4 في صندوق الرمل الجديد الخاص بي ، ولكن من الواضح ، مع جميع الحزم العالمية التي لا أحتاج إليها.

هل هناك طريقة نظيفة لإعداد صندوق رمل جديد مع --no-site--packages الخيار ثم أضف PyQt4 أو PySide استخدام pip, easy_install أو بعض الخدعة السحرية الأخرى؟

هل كانت مفيدة؟

المحلول

يجب أن يكون كافيًا لإنشاء VirtualEnv فارغ ثم نسخ محتويات .../site-packages/PyQt4 الدلائل في ذلك.

أقترح تثبيت PYQT4 مرة واحدة على مستوى العالم ، وقم بإنشاء نسخة من الدليل ، وإلغاء تثبيته ثم استخدم هذه الخدعة لإنشاء VES.

نصائح أخرى

لدي نفس المشكلة. أستخدم VirtualEnvwrapper ، لذلك كتبت هذا البرنامج النصي لإنشاء رابط إلى PYQT في كل بيئة افتراضية جديدة. ربما يكون مفيدًا لشخص آخر:

#!/bin/bash
# This hook is run after a new virtualenv is activated.
# ~/.virtualenvs/postmkvirtualenv

LIBS=( PyQt4 sip.so )

PYTHON_VERSION=python$(python -c "import sys; print (str(sys.version_info[0])+'.'+str(sys.version_info[1]))")
VAR=( $(which -a $PYTHON_VERSION) )

GET_PYTHON_LIB_CMD="from distutils.sysconfig import get_python_lib; print (get_python_lib())"
LIB_VIRTUALENV_PATH=$(python -c "$GET_PYTHON_LIB_CMD")
LIB_SYSTEM_PATH=$(${VAR[-1]} -c "$GET_PYTHON_LIB_CMD")

for LIB in ${LIBS[@]}
do
    ln -s $LIB_SYSTEM_PATH/$LIB $LIB_VIRTUALENV_PATH/$LIB 
done

رابط إلى gist

Linux Debian ، Python 2.7:

  • تثبيت Python-QT4 Globaly: sudo apt-get install python-qt4
  • قم بإنشاء رابط رمزي لـ PYQT4 إلى ENV الخاص بك ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
  • قم بإنشاء رابط رمزي لـ sip.so إلى env الافتراضي الخاص بكln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/

بالنسبة لأولئك الذين يرغبون في استخدام PYQT4 في Python 3 Virtualenv (على OSX) تقوم أولاً بتثبيت PYQT4 و SIP (سأستخدم Homebrew)

$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3

ثم قم بإنشاء بيئتك الافتراضية

$ virtualenv ...

أخيرًا symlink (قم بتغيير إصدارات SIP و PYQT4 و Python لتلك المثبتة على جهازك)

$ ln -s /usr/local/Cellar/sip/4.15.5/lib/python3.4/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/
$ ln -s /usr/local/Cellar/pyqt/4.10.4/lib/python3.4/site-packages/PyQt4/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python3.4/site-packages/PyQt4

سألت عما إذا كان من الممكن تثبيت Pyside من داخل VirtualEnv على قناة Irc.freenode.net #pyside وحصلت على إجابة إيجابية من هوجوبل. لذلك اتبعت التعليمات من ثنائيات البياديس لنظام التشغيل Microsoft Windows وعملت. الإخراج أدناه.

Z:\virtualenv\pyside>Scripts\activate.bat

(pyside) Z:\virtualenv\pyside>where python
Z:\virtualenv\pyside\Scripts\python.exe

(pyside) Z:\virtualenv\pyside>easy_install PySide
install_dir Z:\virtualenv\pyside\Lib\site-packages\
Searching for PySide
Reading http://pypi.python.org/simple/PySide/
Reading http://www.pyside.org
Reading http://www.pyside.org/files/pkg/
Best match: PySide 1.0.0beta1qt471
Downloading http://www.pyside.org/files/pkg/PySide-1.0.0beta1qt471.win32-py2.6.exe
Processing PySide-1.0.0beta1qt471.win32-py2.6.exe
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic-script.py
Deleting c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp\EGG-INFO\scripts\py
ide-uic.exe
creating 'c:\users\piotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg' and adding 'c:\users\
iotr\appdata\local\temp\easy_install-fvfa7e\PySide-1.0.0beta1qt471-py2.6-win32.egg.tmp' to it
creating z:\virtualenv\pyside\lib\site-packages\PySide-1.0.0beta1qt471-py2.6-win32.egg
Extracting PySide-1.0.0beta1qt471-py2.6-win32.egg to z:\virtualenv\pyside\lib\site-packages
Adding PySide 1.0.0beta1qt471 to easy-install.pth file
Installing pyside-uic-script.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.py script to Z:\virtualenv\pyside\Scripts
Installing pyside_postinstall.pyc script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic-script.py script to Z:\virtualenv\pyside\Scripts
Installing pyside-uic.exe script to Z:\virtualenv\pyside\Scripts

Installed z:\virtualenv\pyside\lib\site-packages\pyside-1.0.0beta1qt471-py2.6-win32.egg
Processing dependencies for PySide
Finished processing dependencies for PySide

(pyside) Z:\virtualenv\pyside>python Scripts\pyside_postinstall.py -install
Generating file Z:\virtualenv\pyside\Scripts\qt.conf...
The PySide extensions were successfully installed.

لنفترض أن VirtualEnv يسمى myProject وأنت تستخدم VirtualEnvwrapper. ومن المفترض أيضًا أن يكون منصة UNIX.

$ workon myProject
$ pip install --no-install SIP
$ pip install --no-install PyQt
$ cd ~/.virtualenvs/myProject/build/SIP
$ python configure.py
$ make
$ make install
$ cd ~/.virtualenvs/myProject/build/PyQt
$ python configure.py
$ make
$ make install
$ cd && rm -rf ~/.virtualenvs/myProject/build # Optional.

أسهل طريقة لتثبيت هذا: vext.pyqt4

هذا سيضيف النظام المفرد PyQt4 حزمة إلى VirtualEnv الخاص بك.

Ubuntu 16.04 الاستخدام:

sudo apt install python3-pyqt4
mkvirtualenv --python=python3.5 venv
pip install --no-use-wheel vext.pyqt4

للبيسايد 1.2.1 و Ubuntu 12.4

تثبيت المترجمين ، و QT ذات الصلة ، مصادر بيثون

sudo apt-get install cmake qt4-qmake qt-sdk python-dev

إنشاء الفضيلة معvirtualenvwrapper

كن مستعدًا لتجميع QT (حوالي 30 دقيقة)

$ mkvirtualenv ve_name
(ve_name)$ pip install PySide

اختبار

$ python -c "from PyQt4 import QtCore; print QtCore.PYQT_VERSION_STR"
4.9.1

إذا قمت بتثبيت PYQT عبر المشروب على جهاز Mac (على وجه التحديد أنا على مافريكس):

ln -s /usr/local/Cellar/sip/4.15.2/lib/python2.7/site-packages/*.* ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages
ln -s /usr/local/Cellar/pyqt/4.10.3/lib/python2.7/site-packages/PyQt4/ ~/{VIRTUALENVHOME}/{VIRTUALENVNAME}/lib/python2.7/site-packages/PyQt4
pip install pygments pyzmq 

بالطبع قد تتغير أرقام مجلدات الإصدار هذه بمرور الوقت.

ما نجح بالنسبة لي كان ينسخ /PyQt4/ و sip.x86_64-linux-gnu.so من عند /usr/lib/python2.7/dist-packages ل <VIRTUALENV>/lib/python2.7/site-packages وتغيير أذونات الملكية على هذه الملفات المنسوخة (لأن النسخ كانت مملوكة للجذر).

قد يكون التوسع في إجابة آرون ديجلا ، باستخدام GIT للحصول على قائمة الملفات بشكل صحيح حقًا. عادة ما أفعل شيئًا كهذا (من قذيفة Msysgit):

# Create temp git repo for the pristine Python installation
$ cd /c/Python27
$ git init -q
$ git add .
$ git commit -qm "Initial commit"

ثم قم بتشغيل المثبت لـ PYQT4 (أو أي شيء آخر). بعد ذلك ، قم بعمل تار كرة من الملفات التي أضافها المثبت وحذفها من ريبو GIT Temp ، على النحو التالي:

# Stage the PyQt4-installed files and feed a list of their names to tar
# (note that there's no need to actually commit them)
$ git add --all
$ git diff --cached --name-only | tar -jcf pyqt4.tar.bz2 --files-from=-
$ rm -rf .git

بعد ذلك ، يمكنك تشغيل إلغاء تثبيت Pyqt4 (إذا كنت لا ترغب pyqt4.tar.bz2 في مجلد الافتراضي الخاص بك. إذا كنت مرتاحًا بالفعل باستخدام Git ، فهذه طريقة رائعة لضمان حصولك الكل الملفات المثبتة PYQT4.

ملاحظة: تثبيت PYQT4 باستخدام المثبت المعبأ أيضًا يقوم بتثبيت SIP. إذا كنت تريد بالفعل استعمال هذا SIP لإنشاء روابط لرمز C/C ++ الخاص بك داخل VirtualEnV ، ستحتاج إلى تعديل المسارات في sipconfig.py ملف بعد نسخه. خلاف ذلك ، سيظل نظام بناء SIP يشير إلى مجلد Python System (على سبيل المثال ، C:\Python32 أو أيا كان) ، والتي لن تعمل إذا قمت بحذف جميع الملفات المثبتة من هناك. (إذا لم يكن لديك أي نية لاستخدام SIP بنفسك ، فربما يمكنك تخطي هذا.)

قد تعمل الروابط الرمزية.

يمكنني استخدام Linux (Debian/SID) ، Python 3.4 ، Pyside ، VirtualEnv ، و Pycharm (IDE) ، ولكن هذه التعليمات نفسها ستعمل على أي حزمة وتطوير بيئة.

الروابط الرمزية بين /usr/lib/python3/dist-packages/PySide/ $VIRTUAL_ENV/lib/python3.4/site-packages/PySide/ يعمل لدي.

cd $VIRTUAL_ENV/lib/python3.4/site-packages/
mkdir PySide
cd PySide`
for x in /usr/lib/python3/dist-packages/PySide/* ; do ln -s $x ; done

ومن المثير للاهتمام ، إذا كنت رابطًا رمزيًا فقط PySide الدليل ، لا يعمل. أحتاج إلى تحديد كل ملف داخل الدليل. قد يكون ذلك بمثابة قيود على pycharm (IDE) - لا أعرف.

جرب هذا: PIP تثبيت Python-QT5

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top