[Я первоначально разместил этот вопрос под другим заголовком в StackOverflow ( здесь ), но позже я понял, что моя проблема очень специфична для apt-get
, поэтому я публикую его здесь , Извините за дублирование.]
Я пытаюсь установить PyQt в Ubuntu (и в рамках virtualenv). Список препятствий, с которыми я сталкиваюсь, слишком длинен, чтобы включать его, но в настоящее время я пытаюсь обойти его:
% workon myvenv
(myvenv)% cd ~/.virtualenvs/myvenv/build/pyqt
(myvenv)% python ./configure.py
Traceback (most recent call last):
File "./configure.py", line 32, in <module>
import sipconfig
ОК, так что давайте установим sipconfig
.. .
(myvenv)% pip install SIP
Downloading/unpacking SIP
Downloading sip-4.14.8-snapshot-02bdf6cc32c1.zip (848Kb): 848Kb downloaded
Running setup.py egg_info for package SIP
Traceback (most recent call last):
File "<string>", line 14, in <module>
IOError: [Errno 2] No such file or directory: '/home/yt/.virtualenvs/myvenv/build/SIP/setup.py'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 14, in <module>
IOError: [Errno 2] No such file or directory: '/home/yt/.virtualenvs/myvenv/build/SIP/setup.py'
----------------------------------------
Command python setup.py egg_info failed with error code 1 in /home/yt/.virtualenvs/myvenv/build/SIP
Storing complete log in /home/yt/.pip/pip.log
Единственный найденный мной до сих пор рецепт установки SIP - это
% python configure.py
% make
% sudo make install
... но этот рецепт идет вразрез с моей политикой выполнения всех моих установок Ubuntu либо через apt-get
( или через pip
в случае модулей Python).
Есть ли способ установить SIP с помощью apt-get (и, возможно, pip)?
Основная проблема здесь в том, что virtualenv
предпочитает использовать символическую ссылку /usr/include
вместо копирования этих файлов в $VIRTUAL_ENV/include
(вы можете проверить это, проверяя исходный код virtualenv
: /usr/local/lib/python2.7/dist-packages/virtualenv.py
в моей системе ).
Простым решением было бы просто удалить символическую ссылку и скопировать эти файлы из /usr/include
:
$ cd $VIRTUAL_ENV/include/
$ rm python2.7
$ cp -r /usr/include/python2.7/ .
Обратите внимание, что у вас могут быть символические ссылки на /usr/include/python2.7
, указывающие на относительные местоположения, поэтому при копировании эти файлы они станут сломаны.
Тогда вам нужно лишь немного изменить:
$ python configure.py --incdir="$VIRTUAL_ENV/include/python2.7"
$ make
$ make install
Кстати: если вы хотите заставить virtualenv
копировать эти файлы вместо символьных ссылок, просто измените определение copyfile
в файл исходного кода. Это уродливое решение, но работает.
def copyfile(src, dest, symlink=True):
|-> change this to False