Update to 20.0.23 (#1742034)

epel9
Lumir Balhar 5 years ago
parent 3607f30fe3
commit 9aaabea1a7

@ -1,40 +1,48 @@
Name: python-virtualenv Name: python-virtualenv
Version: 16.7.10 Version: 20.0.23
Release: 2%{?dist} Release: 1%{?dist}
Summary: Tool to create isolated Python environments Summary: Tool to create isolated Python environments
License: MIT License: MIT
URL: http://pypi.python.org/pypi/virtualenv URL: http://pypi.python.org/pypi/virtualenv
Source0: %{pypi_source virtualenv} Source0: %{pypi_source virtualenv}
# Add /usr/share/python-wheels to file_search_dirs # Add /usr/share/python-wheels to extra_search_dir
Patch1: rpm-wheels.patch Patch1: rpm-wheels.patch
BuildArch: noarch BuildArch: noarch
BuildRequires: git-core
BuildRequires: python3-appdirs
BuildRequires: python3-devel BuildRequires: python3-devel
BuildRequires: python3-distlib
BuildRequires: python3-filelock
BuildRequires: python3-setuptools BuildRequires: python3-setuptools
BuildRequires: python3-setuptools_scm
BuildRequires: python3-six
# docs need sphinx >= 3
# docs need towncrier and that is not yet available when bootstrapping Python # docs need towncrier and that is not yet available when bootstrapping Python
%bcond_without docs %bcond_with docs
%if %{with docs} %if %{with docs}
BuildRequires: python3-sphinx BuildRequires: python3-sphinx
BuildRequires: python3-sphinx_rtd_theme BuildRequires: python3-sphinx_rtd_theme
BuildRequires: python3-towncrier BuildRequires: python3-towncrier
%endif %endif
# we don't have all the dependencies %bcond_without tests
# some tests also need internet connection
%bcond_with tests
%if %{with tests} %if %{with tests}
BuildRequires: fish
BuildRequires: gcc
BuildRequires: python3-coverage
BuildRequires: python3-flaky
BuildRequires: python3-packaging
BuildRequires: python3-pytest BuildRequires: python3-pytest
BuildRequires: python3-pytest-xdist BuildRequires: python3-pytest-xdist
BuildRequires: csh BuildRequires: python3-pytest-mock
BuildRequires: fish BuildRequires: python3-pytest-randomly
#BuildRequires: xonsh -- the xonsh tests are failing :( BuildRequires: python3-pytest-timeout
#BuildRequires: python3-pypiserver -- not available yet # FTBFS with Py 3.9: https://bugzilla.redhat.com/show_bug.cgi?id=1817770
#BuildRequires: python3-pytest-localserver -- not available yet # BuildRequires: xonsh
%endif %endif
# RPM installed wheels # RPM installed wheels
@ -52,7 +60,11 @@ licensed under an MIT-style permissive license.
%package -n python3-virtualenv %package -n python3-virtualenv
Summary: Tool to create isolated Python environments Summary: Tool to create isolated Python environments
Requires: python3-appdirs
Requires: python3-distlib
Requires: python3-filelock
Requires: python3-setuptools Requires: python3-setuptools
Requires: python3-six
Obsoletes: python3-virtualenv-python26 < 16.6 Obsoletes: python3-virtualenv-python26 < 16.6
%{?python_provide:%python_provide python3-virtualenv} %{?python_provide:%python_provide python3-virtualenv}
@ -81,16 +93,15 @@ Documentation for python virtualenv.
%prep %prep
%autosetup -p1 -S git -n virtualenv-%{version} %autosetup -p1 -n virtualenv-%{version}
%{__sed} -i -e "1s|#!/usr/bin/env python||" virtualenv.py %{__sed} -i -e "1s|#!/usr/bin/env python||" tasks/update_embedded.py
# Remove the wheels provided by RPM packages # Remove the wheels provided by RPM packages
# Those are the "recent" version shipped with virtualenv 16.6.1 rm src/virtualenv/seed/embed/wheels/pip-*
rm virtualenv_support/pip-* rm src/virtualenv/seed/embed/wheels/setuptools-*
rm virtualenv_support/setuptools-* rm src/virtualenv/seed/embed/wheels/wheel-*
rm virtualenv_support/wheel-*
test ! -f virtualenv_support/*.whl test ! -f src/virtualenv/seed/embed/wheels/*.whl
%build %build
# Build code # Build code
@ -98,7 +109,7 @@ test ! -f virtualenv_support/*.whl
# Build docs # Build docs
%if %{with docs} %if %{with docs}
%{__python3} setup.py build_sphinx PYTHONPATH=src %{python3} setup.py build_sphinx
rm -f build/sphinx/html/.buildinfo rm -f build/sphinx/html/.buildinfo
%endif %endif
@ -110,28 +121,31 @@ rm -f build/sphinx/html/.buildinfo
mkdir tmp_path mkdir tmp_path
ln -s $(realpath %{__python3}) tmp_path/python ln -s $(realpath %{__python3}) tmp_path/python
export PATH="$(pwd)/tmp_path:$PATH" export PATH="$(pwd)/tmp_path:$PATH"
export PYTHONPATH="$(pwd)"
unset SOURCE_DATE_EPOCH unset SOURCE_DATE_EPOCH
cp -p /usr/share/python-wheels/*.whl virtualenv_support
# test_missing_certifi_pem patches bundled pip wheel, but ours is patched already # Skip tests which requires internet or some extra dependencies
# test_always_copy_option https://github.com/pypa/virtualenv/issues/1332 # Requires internet:
python -m pytest -vv -n auto -k "not test_missing_certifi_pem and not test_always_copy_option" # - test_base_bootstrap_via_pip_invoke
# - test_seed_link_via_app_data
# Detects system Python even it should not (problem with mock?):
# - test_py_info_to_system_raises
# Uses disabled functionalities around bundled wheels:
# - test_wheel_support_no_python_requires
# Requires xonsh (FTBFS with Py 3.9)
# - test_xonsh
# Does not work with beta release of Python:
# - test_version_satisfies_nok
%pytest -vv -k "not test_base_bootstrap_via_pip_invoke and not test_seed_link_via_app_data and not test_py_info_to_system_raises and not test_wheel_support_no_python_requires and not test_xonsh and not test_version_satisfies_nok"
rm virtualenv_support/*.whl
rm -r tmp_path rm -r tmp_path
%endif %endif
%files -n python3-virtualenv %files -n python3-virtualenv
%license LICENSE.txt %license LICENSE
%doc docs/*rst PKG-INFO AUTHORS.txt %doc docs/*rst README.md
%{_bindir}/virtualenv %{_bindir}/virtualenv
%{python3_sitelib}/virtualenv.py %{python3_sitelib}/virtualenv/
%dir %{python3_sitelib}/virtualenv_support/
%{python3_sitelib}/virtualenv_support/__init__.py
%{python3_sitelib}/virtualenv_support/__pycache__/
%{python3_sitelib}/virtualenv-*.egg-info/ %{python3_sitelib}/virtualenv-*.egg-info/
%{python3_sitelib}/__pycache__/*
%if %{with docs} %if %{with docs}
%files -n python-virtualenv-doc %files -n python-virtualenv-doc
@ -140,6 +154,9 @@ rm -r tmp_path
%changelog %changelog
* Mon Jun 15 2020 Lumír Balhar <lbalhar@redhat.com> - 20.0.23-1
- Update to 20.0.23 (#1742034)
* Sat May 23 2020 Miro Hrončok <mhroncok@redhat.com> - 16.7.10-2 * Sat May 23 2020 Miro Hrončok <mhroncok@redhat.com> - 16.7.10-2
- Rebuilt for Python 3.9 - Rebuilt for Python 3.9

@ -1,50 +1,187 @@
diff --git a/virtualenv.py b/virtualenv.py From fd3e105dde6f4c14b4d85a325cd70c79d7b452cc Mon Sep 17 00:00:00 2001
index c7f71e6..3740014 100755 From: Lumir Balhar <lbalhar@redhat.com>
--- a/virtualenv.py Date: Fri, 22 May 2020 14:25:48 +0200
+++ b/virtualenv.py Subject: [PATCH] rpm wheels
@@ -475,7 +475,18 @@ def virtualenv_support_dirs():
---
# normal filesystem installation src/virtualenv/seed/embed/base_embed.py | 5 ++++
if os.path.isdir(join(HERE, "virtualenv_support")): src/virtualenv/seed/embed/pip_invoke.py | 5 ++--
- yield [join(HERE, "virtualenv_support")] src/virtualenv/seed/embed/wheels/__init__.py | 3 +++
+ dirs = [join(HERE, "virtualenv_support")] src/virtualenv/seed/embed/wheels/acquire.py | 24 ++++++++++++-------
+ if os.path.isdir("/usr/share/python-wheels"): .../seed/via_app_data/via_app_data.py | 1 +
+ dirs.insert(0, "/usr/share/python-wheels") src/virtualenv/util/path/_system_wheels.py | 22 +++++++++++++++++
+ try: 6 files changed, 49 insertions(+), 11 deletions(-)
+ import ensurepip create mode 100644 src/virtualenv/util/path/_system_wheels.py
+ ensurepip_path = os.path.join(ensurepip.__path__[0], "_bundled")
+ except (ImportError, AttributeError, IndexError): diff --git a/src/virtualenv/seed/embed/base_embed.py b/src/virtualenv/seed/embed/base_embed.py
+ pass index bffd494..349e5ff 100644
+ else: --- a/src/virtualenv/seed/embed/base_embed.py
+ if os.path.isdir(ensurepip_path): +++ b/src/virtualenv/seed/embed/base_embed.py
+ dirs.insert(0, ensurepip_path) @@ -6,6 +6,7 @@ from six import add_metaclass
+ yield dirs
elif IS_ZIPAPP: from virtualenv.util.path import Path
tmpdir = tempfile.mkdtemp() from virtualenv.util.six import ensure_str, ensure_text
try: +from virtualenv.util.path._system_wheels import get_system_wheels_paths
@@ -998,6 +998,8 @@ def find_wheels(projects, search_dirs):
) from ..seeder import Seeder
if project == "pip" and sys.version_info[0:2] == (3, 4):
wheel = next(p for v, p in versions if v <= (19, 1, 1)) @@ -101,3 +102,7 @@ class BaseEmbed(Seeder):
+ elif project == "setuptools" and sys.version_info[0:2] == (3, 4):
+ wheel = next(p for v, p in versions if v < (44,)) def __repr__(self):
else: return ensure_str(self.__unicode__())
wheel = versions[0][1] +
wheels.append(wheel) + def insert_system_wheels_paths(self, creator):
@@ -1091,9 +1093,13 @@ def _install_wheel_with_search_dir(download, project_names, py_executable, searc + system_wheels_paths = get_system_wheels_paths(creator.interpreter.executable)
) + self.extra_search_dir = list(system_wheels_paths) + self.extra_search_dir
).encode("utf8") diff --git a/src/virtualenv/seed/embed/pip_invoke.py b/src/virtualenv/seed/embed/pip_invoke.py
index 25be493..f49a420 100644
- if sys.version_info[0:2] == (3, 4) and "pip" in project_names: --- a/src/virtualenv/seed/embed/pip_invoke.py
- at = project_names.index("pip") +++ b/src/virtualenv/seed/embed/pip_invoke.py
- project_names[at] = "pip<19.2" @@ -23,8 +23,9 @@ class PipInvoke(BaseEmbed):
+ if sys.version_info[0:2] == (3, 4): def run(self, creator):
+ if "pip" in project_names: if not self.enabled:
+ at = project_names.index("pip") return
+ project_names[at] = "pip<19.2" + self.insert_system_wheels_paths(creator)
+ if "setuptools" in project_names: with self.get_pip_install_cmd(creator.exe, creator.interpreter.version_release_str) as cmd:
+ at = project_names.index("setuptools") - with pip_wheel_env_run(creator.interpreter.version_release_str, self.app_data) as env:
+ project_names[at] = "setuptools<44" + with pip_wheel_env_run(creator.interpreter.version_release_str, creator.interpreter.executable, self.app_data) as env:
self._execute(cmd, env)
cmd = [py_executable, "-"] + project_names
logger.start_progress("Installing {}...".format(", ".join(project_names))) @staticmethod
@@ -46,8 +47,6 @@ class PipInvoke(BaseEmbed):
cmd.append("{}{}".format(key, "=={}".format(ver) if ver is not None else ""))
with ExitStack() as stack:
folders = set()
- for context in (ensure_file_on_disk(get_bundled_wheel(p, version), self.app_data) for p in pkg_versions):
- folders.add(stack.enter_context(context).parent)
folders.update(set(self.extra_search_dir))
for folder in folders:
cmd.extend(["--find-links", str(folder)])
diff --git a/src/virtualenv/seed/embed/wheels/__init__.py b/src/virtualenv/seed/embed/wheels/__init__.py
index 90fea02..99cc251 100644
--- a/src/virtualenv/seed/embed/wheels/__init__.py
+++ b/src/virtualenv/seed/embed/wheels/__init__.py
@@ -38,3 +38,6 @@ BUNDLE_SUPPORT = {
},
}
MAX = "3.9"
+
+# Redefined here because bundled wheels are removed in RPM build
+BUNDLE_SUPPORT = None
diff --git a/src/virtualenv/seed/embed/wheels/acquire.py b/src/virtualenv/seed/embed/wheels/acquire.py
index 91b630d..4067f0e 100644
--- a/src/virtualenv/seed/embed/wheels/acquire.py
+++ b/src/virtualenv/seed/embed/wheels/acquire.py
@@ -12,6 +12,7 @@ from zipfile import ZipFile
from virtualenv.info import IS_ZIPAPP
from virtualenv.util.path import Path
+from virtualenv.util.path._system_wheels import get_system_wheels_paths
from virtualenv.util.six import ensure_str, ensure_text
from virtualenv.util.subprocess import Popen, subprocess
from virtualenv.util.zipapp import ensure_file_on_disk
@@ -33,8 +34,9 @@ class WheelDownloadFail(ValueError):
def get_wheels(for_py_version, wheel_cache_dir, extra_search_dir, packages, app_data, download):
# not all wheels are compatible with all python versions, so we need to py version qualify it
processed = copy(packages)
- # 1. acquire from bundle
- acquire_from_bundle(processed, for_py_version, wheel_cache_dir)
+ # Do not use bundled wheels, they are removed in rpmbuild anyway
+ # acquire_from_bundle(processed, for_py_version, wheel_cache_dir)
+
# 2. acquire from extra search dir
acquire_from_dir(processed, for_py_version, wheel_cache_dir, extra_search_dir)
# 3. download from the internet
@@ -47,6 +49,7 @@ def get_wheels(for_py_version, wheel_cache_dir, extra_search_dir, packages, app_
def acquire_from_bundle(packages, for_py_version, to_folder):
+ raise NotImplementedError("Bundled wheels are not available")
for pkg, version in list(packages.items()):
bundle = get_bundled_wheel(pkg, for_py_version)
if bundle is not None:
@@ -67,6 +70,7 @@ def acquire_from_bundle(packages, for_py_version, to_folder):
def get_bundled_wheel(package, version_release):
+ raise NotImplementedError("Bundled wheels are not available") # and BUNDLE_SUPPORT == None anyway
return BUNDLE_FOLDER / (BUNDLE_SUPPORT.get(version_release, {}) or BUNDLE_SUPPORT[MAX]).get(package)
@@ -156,7 +160,7 @@ def download_wheel(packages, for_py_version, to_folder, app_data):
cmd.extend(to_download)
# pip has no interface in python - must be a new sub-process
- with pip_wheel_env_run("{}.{}".format(*sys.version_info[0:2]), app_data) as env:
+ with pip_wheel_env_run("{}.{}".format(*sys.version_info[0:2]), sys.executable, app_data) as env:
process = Popen(cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
out, err = process.communicate()
if process.returncode != 0:
@@ -164,7 +168,7 @@ def download_wheel(packages, for_py_version, to_folder, app_data):
@contextmanager
-def pip_wheel_env_run(version, app_data):
+def pip_wheel_env_run(version, executable, app_data):
env = os.environ.copy()
env.update(
{
@@ -172,7 +176,11 @@ def pip_wheel_env_run(version, app_data):
for k, v in {"PIP_USE_WHEEL": "1", "PIP_USER": "0", "PIP_NO_INPUT": "1"}.items()
},
)
- with ensure_file_on_disk(get_bundled_wheel("pip", version), app_data) as pip_wheel_path:
- # put the bundled wheel onto the path, and use it to do the bootstrap operation
- env[str("PYTHONPATH")] = str(pip_wheel_path)
- yield env
+
+ paths = list(get_system_wheels_paths(executable))
+ pip_wheels = []
+ for path in paths:
+ pip_wheels.extend([str(wheel) for wheel in path.glob("pip-*")])
+ env[str("PYTHONPATH")] = pip_wheels[0] # Use first pip in the list (ensurepip, if exists)
+
+ yield env
diff --git a/src/virtualenv/seed/via_app_data/via_app_data.py b/src/virtualenv/seed/via_app_data/via_app_data.py
index de3757d..db7c6d9 100644
--- a/src/virtualenv/seed/via_app_data/via_app_data.py
+++ b/src/virtualenv/seed/via_app_data/via_app_data.py
@@ -38,6 +38,7 @@ class FromAppData(BaseEmbed):
def run(self, creator):
if not self.enabled:
return
+ self.insert_system_wheels_paths(creator)
base_cache = self.base_cache / creator.interpreter.version_release_str
with self._get_seed_wheels(creator, base_cache) as name_to_whl:
pip_version = name_to_whl["pip"].stem.split("-")[1] if "pip" in name_to_whl else None
diff --git a/src/virtualenv/util/path/_system_wheels.py b/src/virtualenv/util/path/_system_wheels.py
new file mode 100644
index 0000000..a968dee
--- /dev/null
+++ b/src/virtualenv/util/path/_system_wheels.py
@@ -0,0 +1,22 @@
+from subprocess import check_output, CalledProcessError
+
+from virtualenv.util.path import Path
+
+
+def get_system_wheels_paths(executable):
+ # ensurepip wheels
+ # We need subprocess here to check ensurepip with the Python we are creating
+ # a new virtual environment for
+ try:
+ ensurepip_path = check_output((executable, "-u", "-c", 'import ensurepip; print(ensurepip.__path__[0])'), universal_newlines=True)
+ ensurepip_path = Path(ensurepip_path.strip()) / "_bundled"
+ except CalledProcessError:
+ pass
+ else:
+ if ensurepip_path.is_dir():
+ yield ensurepip_path
+
+ # Standard wheels path
+ wheels_dir = Path("/usr/share/python-wheels")
+ if wheels_dir.exists():
+ yield wheels_dir
--
2.26.2

@ -1 +1 @@
SHA512 (virtualenv-16.7.10.tar.gz) = 28bd2f81d0df629cc69ad06401ba25f2fa5c3e9678255ae151e6f2ef7c7a2b0dc89671355dbb6fb1da3a562180ae3769abca160d9933f3aafba43a6fba08793c SHA512 (virtualenv-20.0.23.tar.gz) = 747ae0031ae587dc2bdc0743dcab7b1673273a5c79fc4bcb539eacd899ddc064b622e567b654fc40bdfdaa90e311d2621856085417b8fd344878546b19cdce84

Loading…
Cancel
Save