Skip to content

Commit

Permalink
Drop Python 2 support (#2548)
Browse files Browse the repository at this point in the history
  • Loading branch information
gaborbernat committed Apr 19, 2023
1 parent cdd7eb1 commit 04af502
Show file tree
Hide file tree
Showing 150 changed files with 415 additions and 1,017 deletions.
6 changes: 1 addition & 5 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- pypy-3.8
- pypy-3.7
os:
- ubuntu-20.04
- ubuntu-22.04
- macos-12
- windows-2022
include:
Expand Down Expand Up @@ -60,10 +60,6 @@ jobs:
fetch-depth: 0
- name: Use local virtualenv for tox
run: python -m pip install .
- name: Install Python 2 for cross test
uses: actions/setup-python@v4
with:
python-version: "2.7"
- name: Setup brew python for test ${{ matrix.py }}
if: startsWith(matrix.py,'brew@')
run: |
Expand Down
6 changes: 0 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ repos:
hooks:
- id: pyupgrade
args: ["--py37-plus"]
exclude: "^(src/virtualenv/create/via_global_ref/_virtualenv.py|src/virtualenv/create/via_global_ref/builtin/python2/site.py|src/virtualenv/discovery/py_info.py|tasks/__main__zipapp.py)$"
- repo: https://github.com/asottile/pyupgrade
rev: v2.38.4
hooks:
- id: pyupgrade
files: "^(src/virtualenv/create/via_global_ref/_virtualenv.py|src/virtualenv/create/via_global_ref/builtin/python2/site.py|src/virtualenv/discovery/py_info.py|tasks/__main__zipapp.py)$"
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
Expand Down
1 change: 0 additions & 1 deletion docs/changelog/2496.docs.rst

This file was deleted.

2 changes: 2 additions & 0 deletions docs/changelog/2548.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Drop support for creating Python <3.6 (including 2) interpreters. Removed pip of ``20.3.4``, ``21.3.1``; wheel of
``0.37.1``; setuptools of ``59.6.0``, ``44.1.1``, ``50.3.2``- by :user:`gaborbernat`.
2 changes: 2 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import subprocess
import sys
from datetime import date, datetime
Expand Down
2 changes: 2 additions & 0 deletions docs/render_cli.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from argparse import SUPPRESS
from collections import namedtuple
from contextlib import contextmanager
Expand Down
13 changes: 4 additions & 9 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ dynamic = [
]
dependencies = [
"distlib<1,>=0.3.6",
"filelock<4,>=3.4.1",
'importlib-metadata>=4.8.3; python_version < "3.8"',
"platformdirs<4,>=2.4",
"filelock<4,>=3.11",
'importlib-metadata>=6.4.1; python_version < "3.8"',
"platformdirs<4,>=3.2",
]
optional-dependencies.docs = [
"furo>=2023.3.27",
Expand Down Expand Up @@ -76,15 +76,9 @@ nushell = "virtualenv.activation.nushell:NushellActivator"
powershell = "virtualenv.activation.powershell:PowerShellActivator"
python = "virtualenv.activation.python:PythonActivator"
[project.entry-points."virtualenv.create"]
cpython2-mac-arm-framework = "virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython2macOsArmFramework"
cpython2-mac-framework = "virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython2macOsFramework"
cpython2-posix = "virtualenv.create.via_global_ref.builtin.cpython.cpython2:CPython2Posix"
cpython2-win = "virtualenv.create.via_global_ref.builtin.cpython.cpython2:CPython2Windows"
cpython3-mac-framework = "virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython3macOsFramework"
cpython3-posix = "virtualenv.create.via_global_ref.builtin.cpython.cpython3:CPython3Posix"
cpython3-win = "virtualenv.create.via_global_ref.builtin.cpython.cpython3:CPython3Windows"
pypy2-posix = "virtualenv.create.via_global_ref.builtin.pypy.pypy2:PyPy2Posix"
pypy2-win = "virtualenv.create.via_global_ref.builtin.pypy.pypy2:Pypy2Windows"
pypy3-posix = "virtualenv.create.via_global_ref.builtin.pypy.pypy3:PyPy3Posix"
pypy3-win = "virtualenv.create.via_global_ref.builtin.pypy.pypy3:Pypy3Windows"
venv = "virtualenv.create.via_global_ref.venv:Venv"
Expand All @@ -105,6 +99,7 @@ line-length = 120
[tool.isort]
profile = "black"
known_first_party = ["virtualenv"]
add_imports = ["from __future__ import annotations"]

[tool.flake8]
max-complexity = 22
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from .run import cli_run, session_via_cli
from .version import __version__

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/__main__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import logging
import os
import sys
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from .bash import BashActivator
from .batch import BatchActivator
from .cshell import CShellActivator
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/activator.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os
from abc import ABCMeta, abstractmethod

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/bash/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from pathlib import Path

from ..via_template import ViaTemplateActivator
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/batch/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os

from ..via_template import ViaTemplateActivator
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/cshell/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from ..via_template import ViaTemplateActivator


Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/fish/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from ..via_template import ViaTemplateActivator


Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/nushell/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from ..via_template import ViaTemplateActivator


Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/powershell/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from ..via_template import ViaTemplateActivator


Expand Down
14 changes: 3 additions & 11 deletions src/virtualenv/activation/python/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

import os
import sys
from collections import OrderedDict

from ..via_template import ViaTemplateActivator
Expand All @@ -12,23 +13,14 @@ def templates(self):
def replacements(self, creator, dest_folder):
replacements = super().replacements(creator, dest_folder)
lib_folders = OrderedDict((os.path.relpath(str(i), str(dest_folder)), None) for i in creator.libs)
win_py2 = creator.interpreter.platform == "win32" and creator.interpreter.version_info.major == 2
replacements.update(
{
"__LIB_FOLDERS__": os.pathsep.join(lib_folders.keys()),
"__DECODE_PATH__": ("yes" if win_py2 else ""),
"__DECODE_PATH__": "",
},
)
return replacements

@staticmethod
def _repr_unicode(creator, value):
py2 = creator.interpreter.version_info.major == 2
if py2: # on Python 2 we need to encode this into explicit utf-8, py3 supports unicode literals
start = 2 if sys.version_info[0] == 3 else 1
value = repr(value.encode("utf-8"))[start:-1]
return value


__all__ = [
"PythonActivator",
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/python/activate_this.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
"""
from __future__ import annotations

import os
import site
import sys
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/activation/via_template.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os
import sys
from abc import ABCMeta, abstractmethod
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
Application data stored by virtualenv.
"""

from __future__ import annotations

import logging
import os

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
Application data stored by virtualenv.
"""

from __future__ import annotations

from abc import ABCMeta, abstractmethod
from contextlib import contextmanager

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/na.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from contextlib import contextmanager

from .base import AppData, ContentStore
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/read_only.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os.path

from virtualenv.util.lock import NoOpFileLock
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/via_disk_folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
└── _virtualenv.py
"""

from __future__ import annotations

import json
import logging
from abc import ABCMeta
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/app_data/via_tempdir.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import logging
from tempfile import mkdtemp

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/config/cli/parser.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import os
from argparse import SUPPRESS, ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace
from collections import OrderedDict
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/config/convert.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import logging
import os

Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/config/env_var.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from .convert import convert


Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/config/ini.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import logging
import os
from configparser import ConfigParser
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/create/creator.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import json
import logging
import os
Expand Down
6 changes: 3 additions & 3 deletions src/virtualenv/create/debug.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Inspect a target Python interpreter virtual environment wise"""
import sys # built-in
from __future__ import annotations

PYPY2_WIN = hasattr(sys, "pypy_version_info") and sys.platform != "win32" and sys.version_info[0] == 2
import sys # built-in


def encode_path(value):
Expand All @@ -12,7 +12,7 @@ def encode_path(value):
value = repr(value)
else:
value = repr(type(value))
if isinstance(value, bytes) and not PYPY2_WIN:
if isinstance(value, bytes):
value = value.decode(sys.getfilesystemencoding())
return value

Expand Down
11 changes: 3 additions & 8 deletions src/virtualenv/create/describe.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

from abc import ABCMeta
from collections import OrderedDict
from pathlib import Path
Expand Down Expand Up @@ -58,7 +60,7 @@ def _config_vars(self):

def _calc_config_vars(self, to):
sys_vars = self.interpreter.sysconfig_vars
return {k: (to if v.startswith(self.interpreter.prefix) else v) for k, v in sys_vars.items()}
return {k: (to if v is not None and v.startswith(self.interpreter.prefix) else v) for k, v in sys_vars.items()}

@classmethod
def can_describe(cls, interpreter): # noqa: U100
Expand All @@ -82,12 +84,6 @@ def script(self, name):
return self.script_dir / f"{name}{self.suffix}"


class Python2Supports(Describe, metaclass=ABCMeta):
@classmethod
def can_describe(cls, interpreter):
return interpreter.version_info.major == 2 and super().can_describe(interpreter)


class Python3Supports(Describe, metaclass=ABCMeta):
@classmethod
def can_describe(cls, interpreter):
Expand All @@ -108,7 +104,6 @@ def can_describe(cls, interpreter):

__all__ = [
"Describe",
"Python2Supports",
"Python3Supports",
"PosixSupports",
"WindowsSupports",
Expand Down
2 changes: 2 additions & 0 deletions src/virtualenv/create/pyenv_cfg.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import annotations

import logging
from collections import OrderedDict

Expand Down

0 comments on commit 04af502

Please sign in to comment.