def fix_locations(package, interpreter, versions, options): """Move files to the right location.""" # make a copy since we change version later interpreter = Interpreter(interpreter) for version in versions: interpreter.version = version dstdir = interpreter.sitedir(package) for srcdir in interpreter.old_sitedirs(package): if isdir(srcdir): # TODO: what about relative symlinks? log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) parent_dir = '/'.join(srcdir.split('/')[:-1]) while parent_dir: if exists(parent_dir): if os.listdir(parent_dir): break os.rmdir(parent_dir) parent_dir = dirname(parent_dir) # do the same with debug locations dstdir = interpreter.sitedir(package, gdb=True) for srcdir in interpreter.old_sitedirs(package, gdb=True): if isdir(srcdir): log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) parent_dir = '/'.join(srcdir.split('/')[:-1]) while parent_dir: if exists(parent_dir): if os.listdir(parent_dir): break os.rmdir(parent_dir) parent_dir = dirname(parent_dir)
def test_python26dbg(self): i = Interpreter('python2.6-dbg') self.assertEqual(i.soabi(), '') self.assertIsNone(i.check_extname('foo_d.so')) self.assertEqual(i.check_extname('foo.so'), 'foo_d.so') self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/bazmodule_d.so')
def fix_locations(package, interpreter, versions, options): """Move files to the right location.""" # make a copy since we change version later interpreter = Interpreter(interpreter) for version in versions: interpreter.version = version dstdir = interpreter.sitedir(package) for srcdir in interpreter.old_sitedirs(package): if isdir(srcdir): # TODO: what about relative symlinks? log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) try: os.removedirs(srcdir) except OSError: pass # do the same with debug locations dstdir = interpreter.sitedir(package, gdb=True) for srcdir in interpreter.old_sitedirs(package, gdb=True): if isdir(srcdir): log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) try: os.removedirs(srcdir) except OSError: pass
def test_pypy(self): sorted(Interpreter.parse('pypy').items()) == \ [('debug', None), ('name', 'pypy'), ('options', ()), ('path', ''), ('version', None)] sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items()) == \ [('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)] Interpreter('pypy').sitedir( version='2.0') == '/usr/lib/pypy/dist-packages/'
def get_requested_versions(impl, vrange=None, available=None): """Return a set of requested and supported Python versions. :param impl: interpreter implementation :param available: if set to `True`, return installed versions only, if set to `False`, return requested versions that are not installed. By default returns all requested versions. :type available: bool >>> sorted(get_requested_versions('cpython3', '')) == sorted(supported('cpython3')) True >>> sorted(get_requested_versions('cpython3', '-')) == sorted(supported('cpython3')) True >>> get_requested_versions('cpython3', '>= 5.0') set() """ if isinstance(vrange, str): vrange = VersionRange(vrange) if not vrange: versions = set(supported(impl)) else: minv = Version(major=0, minor=0) if vrange.minver is None else vrange.minver maxv = Version(major=99, minor=99) if vrange.maxver is None else vrange.maxver if minv == maxv: versions = set([minv] if minv in supported(impl) else tuple()) else: versions = set(v for v in supported(impl) if minv <= v < maxv) if available is not None: # to avoid circular imports global Interpreter if Interpreter is None: from dhpython.interpreter import Interpreter if available: interpreter = Interpreter(impl=impl) versions = set(v for v in versions if exists(interpreter.binary(v))) elif available is False: interpreter = Interpreter(impl=impl) versions = set(v for v in versions if not exists(interpreter.binary(v))) return versions
def test_python27dbg(self): i = Interpreter('python2.7-dbg') self.assertEqual(i.soabi(), '') self.assertEqual(i.check_extname('foo.so'), 'foo.MYARCH_d.so') self.assertEqual(i.check_extname('foo_d.so'), 'foo.MYARCH_d.so') self.assertIsNone(i.check_extname('foo.MYARCH_d.so')) self.assertIsNone( i.check_extname('foo.OTHER_d.so')) # different architecture self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/baz.MYARCH_d.so')
def test_python32(self): i = Interpreter('python3.2') self.assertEqual(i.soabi(), 'cpython-32mu') self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-32mu.so') self.assertIsNone( i.check_extname('foo.cpython-33m.so')) # different version self.assertIsNone(i.check_extname( 'foo.cpython-32mu-OTHER.so')) # different architecture self.assertIsNone(i.check_extname('foo.abi3.so')) self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/bazmodule.cpython-32mu.so')
def test_python36dbg(self): i = Interpreter('python3.6-dbg') self.assertEqual(i.soabi(), 'cpython-36dm') self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-36dm-MYARCH.so') self.assertIsNone( i.check_extname('foo.cpython-32m.so')) # different version self.assertIsNone(i.check_extname( 'foo.cpython-36m-OTHER.so')) # different architecture self.assertIsNone(i.check_extname('foo.abi3.so')) self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-36dm-MYARCH.so')
def test_python31dbg(self): i = Interpreter('python3.1-dbg') self.assertEqual(i.soabi(), '') self.assertIsNone(i.check_extname('foo.so')) self.assertIsNone(i.check_extname('foo.abi3.so')) self.assertIsNone(i.check_extname('foo/bar/bazmodule.so'))
def test_version(self): i = Interpreter(impl='cpython2') self.assertEqual(str(i), 'python') self.assertEqual(i.binary('2.7'), '/usr/bin/python2.7')