diff --git a/docs/changelog/2189.misc.rst b/docs/changelog/2189.misc.rst new file mode 100644 index 000000000..6ef2b563e --- /dev/null +++ b/docs/changelog/2189.misc.rst @@ -0,0 +1 @@ +Fail early instead of creating a non-working env for Python 2 on Apple Silicon (M1) Macs. diff --git a/src/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py b/src/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py index 53f65e341..c6343e7cb 100644 --- a/src/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py +++ b/src/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py @@ -10,6 +10,7 @@ from six import add_metaclass from virtualenv.create.via_global_ref.builtin.ref import ExePathRefToDest, PathRefToDest, RefMust +from virtualenv.info import IS_MAC_ARM64 from virtualenv.util.path import Path from virtualenv.util.six import ensure_text @@ -102,6 +103,13 @@ def reload_code(self): ) return result + @classmethod + def can_create(cls, interpreter): + if IS_MAC_ARM64: + return False + else: + return super(CPythonmacOsFramework, cls).can_create(interpreter) + class CPython3macOsFramework(CPythonmacOsFramework, CPython3, CPythonPosix): @classmethod diff --git a/src/virtualenv/info.py b/src/virtualenv/info.py index afe409773..7d5e86d78 100644 --- a/src/virtualenv/info.py +++ b/src/virtualenv/info.py @@ -12,6 +12,7 @@ PY3 = sys.version_info[0] == 3 PY2 = sys.version_info[0] == 2 IS_WIN = sys.platform == "win32" +IS_MAC_ARM64 = sys.platform == "darwin" and platform.machine() == "arm64" ROOT = os.path.realpath(os.path.join(os.path.abspath(__file__), os.path.pardir, os.path.pardir)) IS_ZIPAPP = os.path.isfile(ROOT) WIN_CPYTHON_2 = IS_CPYTHON and IS_WIN and PY2