import os.path import sys import unittest from sysconfig import is_python_build MINOR = sys.version_info.minor MULTIARCH_TRIPLET = 'x86_64-linux-gnu' PYPREFIX = f'/usr/lib64/python3.{MINOR}' STDLIB = PYPREFIX PLATLIB = f'{STDLIB}/site-packages' USER_PREFIX = os.path.expanduser(f'~/.local') class Lib64Tests(unittest.TestCase): @staticmethod def tearDownClass(): print() if is_python_build(): print("WARNING: Python is run from its source directory!") print("PR 18381 (sys.platlibdir)?", hasattr(sys, 'platlibdir')) def test_import(self): import _multiprocessing if not is_python_build(): self.assertEqual(os.__file__, f'{STDLIB}/os.py') self.assertEqual(_multiprocessing.__file__, f'{PYPREFIX}/lib-dynload/' f'_multiprocessing.cpython-3{MINOR}m-{MULTIARCH_TRIPLET}.so') def test_sys(self): self.assertEqual(sys.prefix, '/usr') self.assertEqual(sys.exec_prefix, '/usr') # PR 18381 if hasattr(sys, 'platlibdir'): self.assertEqual(sys.platlibdir, 'lib64') paths = list(sys.path) if not paths[0]: del paths[0] if paths[0] == os.getcwd(): del paths[0] self.assertEqual(paths[0], f'/usr/lib64/python3{MINOR}.zip') if not is_python_build(): self.assertEqual(paths[1], PYPREFIX) self.assertEqual(paths[2], f'{PYPREFIX}/lib-dynload') # ignore following entries like user site-packages def test_distutils_sysconfig(self): from distutils.sysconfig import get_config_var, get_python_lib if hasattr(sys, 'platlibdir'): self.assertEqual(get_config_var('PLATLIBDIR'), 'lib64') self.assertEqual(get_config_var('LIBPL'), '/usr/lib64/python3.9/config-3.9d-x86_64-linux-gnu') self.assertEqual(get_python_lib(plat_specific=True), PLATLIB) self.assertEqual(get_python_lib(standard_lib=True), STDLIB) self.assertEqual(get_python_lib(plat_specific=True, standard_lib=True), STDLIB) def test_distutils_install(self): from distutils.core import Distribution from distutils.command.install import INSTALL_SCHEMES, install dist = Distribution({"name": "foopkg"}) cmd = install(dist) # use 'unix_home' scheme cmd.home = USER_PREFIX cmd.finalize_options() self.assertEqual(cmd.install_platlib, f'{USER_PREFIX}/lib64/python') cmd = install(dist) cmd.select_scheme('unix_prefix') cmd.finalize_options() self.assertEqual(cmd.install_platlib, PLATLIB) def test_sysconfig(self): from sysconfig import get_path self.assertEqual(get_path('stdlib', 'posix_prefix'), STDLIB) self.assertEqual(get_path('platstdlib', 'posix_prefix'), STDLIB) self.assertEqual(get_path('platlib', 'posix_prefix'), PLATLIB) user_stdlib = os.path.expanduser(f'{USER_PREFIX}/lib64/python3.{MINOR}') user_platlib = os.path.expanduser(f'{USER_PREFIX}/lib64/python3.{MINOR}/site-packages') self.assertEqual(get_path('stdlib', 'posix_user'), user_stdlib) self.assertEqual(get_path('platstdlib', 'posix_user'), user_stdlib) self.assertEqual(get_path('platlib', 'posix_user'), user_platlib) unittest.main()