Можно ли добавить пакеты PyQt4/PySide в песочницу Virtualenv?
-
21-09-2019 - |
Вопрос
я использую виртуаленв с прибылью в моей среде разработки с 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
или какой-то другой волшебный трюк?
Решение
Должно быть достаточно создать пустой виртуальный окружение, а затем скопировать его содержимое. .../site-packages/PyQt4
каталоги в него.
Я предлагаю установить PyQt4 один раз глобально, сделать копию каталога, удалить его, а затем использовать этот трюк для создания VE.
Другие советы
У меня та же проблема.Я использую 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 глобально:
sudo apt-get install python-qt4
- Создайте символическую ссылку PyQt4 на вашу виртуальную среду.
ln -s /usr/lib/python2.7/dist-packages/PyQt4/ ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
- Создайте символическую ссылку sip.so на вашу виртуальную среду.
ln -s /usr/lib/python2.7/dist-packages/sip.so ~/.virtualenvs/myEnv/lib/python2.7/site-packages/
Для тех, кто хочет использовать PyQt4 в виртуальной среде Python 3 (на OSX), вы сначала устанавливаете PyQt4 и SIP (я буду использовать доморощенный)
$ brew install python3
$ brew install sip --with-python3
$ brew install pyqt --with-python3
Затем создайте свою виртуальную среду
$ virtualenv ...
Наконец, символическая ссылка (измените версии 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 на канале #pyside 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.
Предположим, ваш виртуальный файл называется 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
Для PySide 1.2.1 и Ubuntu 12.4
Установите компиляторы, связанные с Qt, исходники Python.
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 через Brew на Mac (в частности, я использую Mavericks):
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
и изменение прав владения этими скопированными файлами (поскольку копии принадлежали пользователю root).
Расширяя ответ Аарона Дигуллы, использование 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 следующим образом:
# 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 (если вы не хотите загромождать свою систему Python) и просто разархивировать pyqt4.tar.bz2
в вашу папку virtualenv.Если вы уже освоились с git, это отличный способ убедиться, что вы получите все файлы, установленные PyQt4.
ПРИМЕЧАНИЕ:При установке PyQt4 с помощью пакетного установщика также устанавливается SIP.Если вы действительно хотите использовать этот SIP для создания привязок для вашего собственного кода C/C++ внутри вашего виртуального окружения, вам нужно изменить пути в sipconfig.py
файл после того, как вы его скопируете.В противном случае система сборки SIP по-прежнему будет указывать на системную папку Python (например, C:\Python32
или что-то еще), что не сработает, если вы удалите оттуда все файлы, установленные PyQt4.(Если вы не собираетесь использовать 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