Install pip by hand in virtualenv on Debian.

It seems Debian/Ubuntu don't have the ensurepip module, so Python's venv will
fail unless started with --without-pip and us installing pip by hand via
get-pip.py :(

Related bugs:

    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772730
    https://bugs.launchpad.net/ubuntu/+source/python3.4/+bug/1290847

See #463.
This commit is contained in:
Florian Bruhin 2015-01-23 14:28:36 +01:00
parent 2201ca600b
commit 7580473a43

View File

@ -31,11 +31,20 @@ import subprocess
import distutils.sysconfig # pylint: disable=import-error
# see https://bitbucket.org/logilab/pylint/issue/73/
import venv
import urllib.request
import tempfile
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir))
from scripts import utils
try:
import ensurepip # pylint: disable=import-error
except ImportError:
# Debian-like systems don't have ensurepip...
ensurepip = None
g_path = None
g_args = None
@ -143,6 +152,19 @@ def link_pyqt():
os.symlink(source, dest)
def install_pip():
"""Install pip on Debian-like systems which don't have ensurepip.
WORKAROUND for https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772730 and
https://bugs.launchpad.net/ubuntu/+source/python3.4/+bug/1290847
"""
utils.print_title("Installing pip/setuptools")
f = urllib.request.urlopen('https://bootstrap.pypa.io/get-pip.py')
with tempfile.NamedTemporaryFile() as tmp:
tmp.write(f.read())
venv_python(tmp.name)
def create_venv():
"""Create a new venv."""
utils.print_title("Creating venv")
@ -153,8 +175,11 @@ def create_venv():
clear = g_args.clear or g_args.force
builder = venv.EnvBuilder(system_site_packages=False,
clear=clear, upgrade=g_args.upgrade,
symlinks=symlinks, with_pip=True)
symlinks=symlinks, with_pip=ensurepip)
builder.create(g_path)
# If we don't have ensurepip, we have to do it by hand...
if not ensurepip:
install_pip()
def main():
@ -174,9 +199,6 @@ def main():
create_venv()
utils.print_title("Installing setuptools")
venv_python('-m', 'pip', 'install', 'setuptools')
utils.print_title("Calling: setup.py develop")
venv_python('setup.py', 'develop')