هل من الممكن إضافة حزم pyqt4/pyside على صندوق رمل افتراضي؟
-
21-09-2019 - |
سؤال
أنا استخدم 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
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