web-dev-qa-db-ja.com

apt-get + pip + virtualenvでSIP + PyQtをインストールする方法は?

[もともとこの質問を別のタイトルでStackOverflowに投稿しました( here )が、後で私の問題がapt-getに特有であることに気付いたので、ここに再投稿しています。 。重複してすみません。]

Ubuntu(およびvirtualenv内)にPyQtをインストールしようとしています。私が扱っている障害のリストは長すぎてここに含めることはできませんが、私が現在乗り越えようとしているものは次のとおりです。

% 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

...しかし、このレシピは、apt-get(またはPythonモジュールの場合はpipを介して)すべてのUbuntuインストールを実行するという私のポリシーに反します。

SIPをapt-get(および場合によってはpip)でインストールできる方法はありますか?

3
kjo

ここでの主な問題は、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
2
Salem