Как установить SIP + PyQt с помощью apt-get + pip + virtualenv?

[Я первоначально разместил этот вопрос под другим заголовком в 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)?

3
задан 23 May 2017 в 15:39

1 ответ

Основная проблема здесь в том, что 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
0
ответ дан 23 May 2017 в 15:39

Другие вопросы по тегам:

Похожие вопросы: