Como instalar o SIP + PyQt com o apt-get + pip + virtualenv?

3

[Originalmente postei essa pergunta, sob um título diferente, no StackOverflow ( aqui ), mas depois percebi que meu problema é muito específico para apt-get , por isso estou postando novamente aqui. Desculpe pela duplicação.]

Estou tentando instalar o PyQt no Ubuntu (e dentro de um virtualenv). A lista de obstáculos com os quais estou lidando é muito longa para incluir aqui, mas o que eu estou tentando passar é o seguinte:

% 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

OK, então vamos instalar o 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

A única receita que encontrei até agora instalando o SIP é esta

% python configure.py
% make
% sudo make install

... mas esta receita vai contra minha política de fazer todas as minhas instalações do Ubuntu através de apt-get (ou através de pip no caso de módulos Python).

Existe alguma maneira de instalar o SIP com o apt-get (e possivelmente pip)?

    
por kjo 24.06.2013 / 18:19

1 resposta

2

O principal problema aqui é que virtualenv parece preferir fazer um symlink /usr/include em vez de copiar esses arquivos para $VIRTUAL_ENV/include (você pode verificar isso enquanto inspeciona o código-fonte de virtualenv : /usr/local/lib/python2.7/dist-packages/virtualenv.py no meu sistema ).

Uma solução fácil seria apenas remover o link simbólico e copiar esses arquivos de /usr/include :

$ cd $VIRTUAL_ENV/include/
$ rm python2.7
$ cp -r /usr/include/python2.7/ .

Por favor, note que você pode ter links simbólicos em /usr/include/python2.7 apontando para localizações relativas, então quando você copiar esses arquivos eles serão quebrados.

Então você só precisa de uma pequena modificação:

$ python configure.py --incdir="$VIRTUAL_ENV/include/python2.7"
$ make
$ make install

BTW: se você quiser forçar o virtualenv a copiar esses arquivos em vez do symlink'ing, apenas altere a definição de copyfile no arquivo de código-fonte. É uma solução feia mas funciona.

def copyfile(src, dest, symlink=True):
                                 |-> change this to False
    
por Salem 25.06.2013 / 17:05

Tags