Date: Tue, 11 Mar 2014 23:15:16 +0300 From: David Naylor <dbn@freebsd.org> To: python@freebsd.org Cc: nivit@freebsd.org, Tobias Oberstein <tobias.oberstein@tavendo.de> Subject: [RFC] Add support to virtualenv for out implementation of pypy Message-ID: <1820006.CmSahJhOvA@dragon.dg>
next in thread | raw e-mail | index | archive | help
--nextPart2551281.1afdmRE7dP Content-Type: multipart/mixed; boundary="nextPart5147813.9G4fd4biQ4" Content-Transfer-Encoding: 7Bit This is a multi-part message in MIME format. --nextPart5147813.9G4fd4biQ4 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Hi, The version of pypy in ports is not a standard version, as it tries to follow the directory layout of python and not have everything in its own subdirectory. As a result of this virtualenv support does not work. A large portion of the problem is that virtualenv hard codes directory paths that it should be deducing from the python libraries (such as sysconfig or distutils.sysconfig). Please find attached for a patch that adds support for our pypy to virtualenv, I have tried to do it in a manor that is generic and should be upstreamable (except for some site-packages) related stuff. When testing this please use lang/pypy-devel, or apply the sysconfig.py patch - also attached - to the sysconfig.py found in /usr/local/lib/pypy-2.2. Regards --nextPart5147813.9G4fd4biQ4 Content-Disposition: attachment; filename="virtualenv.diff" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="ISO-8859-1"; name="virtualenv.diff" Only in ./scripts: virtualenv-2.7 diff -ur ../virtualenv-1.10.1/virtualenv.py ./virtualenv.py --- ../virtualenv-1.10.1/virtualenv.py 2013-08-08 03:05:07.000000000 +0200 +++ ./virtualenv.py 2014-03-11 23:05:09.000000000 +0200 @@ -22,6 +22,7 @@ import struct import subprocess import tarfile +import sysconfig if sys.version_info < (2, 6): print('ERROR: %s' % sys.exc_info()[1]) @@ -107,7 +108,7 @@ 'fnmatch', 'locale', 'encodings', 'codecs', 'stat', 'UserDict', 'readline', 'copy_reg', 'types', 're', 'sre', 'sre_parse', 'sre_constants', 'sre_compile', - 'zlib'] + 'sysconfig', 'zlib'] REQUIRED_FILES = ['lib-dynload', 'config'] @@ -131,7 +132,6 @@ if minver >= 2: REQUIRED_FILES[-1] = 'config-%s' % majver if minver == 3: - import sysconfig platdir = sysconfig.get_config_var('PLATDIR') REQUIRED_FILES.append(platdir) # The whole list of 3.3 modules is reproduced below - the current @@ -970,8 +970,6 @@ def path_locations(home_dir): """Return the path locations for the environment (where libraries are, where scripts go, etc)""" - # XXX: We'd use distutils.sysconfig.get_python_inc/lib but its - # prefix arg is broken: http://bugs.python.org/issue3386 if is_win: # Windows has lots of problems with executables with spaces in # the name; this function will remove them (using the ~1 @@ -993,19 +991,11 @@ print('Exiting.') sys.exit(3) home_dir = str(buf.value) - lib_dir = join(home_dir, 'Lib') - inc_dir = join(home_dir, 'Include') - bin_dir = join(home_dir, 'Scripts') - if is_jython: - lib_dir = join(home_dir, 'Lib') - inc_dir = join(home_dir, 'Include') - bin_dir = join(home_dir, 'bin') - elif is_pypy: - lib_dir = home_dir - inc_dir = join(home_dir, 'include') - bin_dir = join(home_dir, 'bin') - elif not is_win: - lib_dir = join(home_dir, 'lib', py_version) + paths = sysconfig.get_paths(vars={'base':home_dir, 'platbase':home_dir}) + lib_dir = paths['stdlib'] + inc_dir = paths['include'] + bin_dir = paths['scripts'] + if not is_win: multiarch_exec = '/usr/bin/multiarch-platform' if is_executable_file(multiarch_exec): # In Mageia (2) and Mandriva distros the include dir must be like: @@ -1015,12 +1005,8 @@ stdout, stderr = p.communicate() # stdout.strip is needed to remove newline character inc_dir = join(home_dir, 'include', stdout.strip(), py_version + abiflags) - else: - inc_dir = join(home_dir, 'include', py_version + abiflags) - bin_dir = join(home_dir, 'bin') return home_dir, lib_dir, inc_dir, bin_dir - def change_prefix(filename, dst_prefix): prefixes = [sys.prefix] @@ -1166,10 +1152,7 @@ if not site_packages: writefile(site_packages_filename, '') - if is_pypy or is_win: - stdinc_dir = join(prefix, 'include') - else: - stdinc_dir = join(prefix, 'include', py_version + abiflags) + stdinc_dir = sysconfig.get_path('include') if os.path.exists(stdinc_dir): copyfile(stdinc_dir, inc_dir, symlink) else: @@ -1192,12 +1175,7 @@ # pypy never uses exec_prefix, just ignore it if sys.exec_prefix != prefix and not is_pypy: - if is_win: - exec_dir = join(sys.exec_prefix, 'lib') - elif is_jython: - exec_dir = join(sys.exec_prefix, 'Lib') - else: - exec_dir = join(sys.exec_prefix, 'lib', py_version) + exec_dir = sysconfig.get_path('stdlib') for fn in os.listdir(exec_dir): copyfile(join(exec_dir, fn), join(lib_dir, fn), symlink) @@ -1493,21 +1471,16 @@ Platforms that use the "posix_local" install scheme (like Ubuntu with Python 2.7) need to be given an additional "local" location, sigh. """ - try: - import sysconfig - except ImportError: - pass - else: - if sysconfig._get_default_scheme() == 'posix_local': - local_path = os.path.join(home_dir, 'local') - if not os.path.exists(local_path): - os.mkdir(local_path) - for subdir_name in os.listdir(home_dir): - if subdir_name == 'local': - continue - cp_or_ln = (os.symlink if symlink else copyfile) - cp_or_ln(os.path.abspath(os.path.join(home_dir, subdir_name)), \ - os.path.join(local_path, subdir_name)) + if sysconfig._get_default_scheme() == 'posix_local': + local_path = os.path.join(home_dir, 'local') + if not os.path.exists(local_path): + os.mkdir(local_path) + for subdir_name in os.listdir(home_dir): + if subdir_name == 'local': + continue + cp_or_ln = (os.symlink if symlink else copyfile) + cp_or_ln(os.path.abspath(os.path.join(home_dir, subdir_name)), \ + os.path.join(local_path, subdir_name)) def fix_lib64(lib_dir, symlink=True): """ @@ -1815,147 +1788,159 @@ ##file site.py SITE_PY = convert(""" -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 -abV46zZtMMiZnWgPwBqF4P8ACHXrHw== +eNrFPWtz3DaS3/krsONyccYZUbacze3JUa5kW060p9ja2Kn1raKa5cxgNIw4JEOQkma39n +779QMAAT5G0iZ760rZEgE0Go1+odGNjEaj46KQ2VJs8mWdSqFkXC7WooirtRKrvBTVOimX +e0VcVlv4uriOr6QSVS7UVkXYKwqCZ7/yT/BMfFonyqAAP8V1lW/iKlnEaboVyabIy0ouxb +Iuk+xKJFlSJXGa/A165Fkknv16DILTTMDK00SW4kaWCuAqka/E+bZa55kY1wWu+UX0+/jl +ZCrUokyKCjqUGmegyDqugkzKJaAJPWsFpEwquacKuUhWycJ2vM3rdCmKNF5I8de/8tKoax +gGKt/I27UspcgAGYApAVaBeMCPSSkW+VJGQryWixgn4O8NsQKGNsU9U0jGLBdpnl3BmjK5 +kErF5VaM53VFgAhlscwBpwQwqJI0DW7z8lpNYEtpP27hk4iZPfzFMHvAOnH+LucAjh+y4M +csuZsybOAeBFetmW1KuUruRIxg4Vd5Jxcz/W2crMQyWa2ABlk1wS4BI6BEmsz3C9qOr/UO +fbNPWFmujGEOiShzZ26kEVFwWok4VcC2dYE0UoT5WzlP4gyokd3AdAARSBr0zbNMVGXnod +WJHACUuI8VSMlGifEmTjJg1u/jBaH95yRb5rdqQhSA3VLi51pV7vrHPQSA3g4BpgFultnN +OkuTa5luJ4DAJ8C+lKpOKxSIZVLKRZWXiVQEAFDbCnkHSE9FXEpNQuZMI7dToj/RJMlwY1 +HAUOCxEUmySq7qkiRMrBLgXOCKdx9+EG9PXp8ev9c8ZoCxzF5tAGeAQhvt4AQTiP1alftp +DgIdBWf4j4iXSxSyK5wf8Go67N+708EY1l5E7THOhgPZ9ebqaWCNFSgTmiugcX+HIVO1Bv +r84579DoLjIarQwvmn23UOMpnFGynWMfMXckbwtYbzTVRU61fADQrhVEAqhZuDCCYID0ji +0mycZ1IUwGJpkslJABSaU19/F4EV3ufZHu11ixMAQhlk0Oh8m9CMmYSFdmG9Qn1hOm9pZb +pLYPd5k5ekOID/swXpojTOrglHRQzFP83lVZJliBDyQhA+CWlidZ0AJy4jcUa9SC+YTiJk +7cU9USRq4CVkOuBJeRdvilROWXxRt+5WIzSZrITZ65Q5DnpWpF5p15ql9vLeQfS5xXWEZr +UuJQCv557QrfJ8KuagswmbIt6weFW3OXFO0CNPNAh5gnrCWPwZKHqsVL2RthF5BTQLMVSw +ytM0vwWSHQaBEE+wkzHKPnNCK7TB3wAX/05ltVgHgTOTBaxBIfJDoBAImASZaa7WSHjcpl +m5rWSSjDVFXi5lSVM9jNj7jPgDO+Nag/d5pY0aLxd3Od8kFaqkuTaZCVu8LKxYP77idcMy +wHIropnp2tBpg8tLi3U8l8YlmcsVSoLepFd222HOoGdOssWV2LCVgTYgi0zYgvQrFlQ6q0 +qSEwAwWPjiLCnqlDopZDARw0SbguBvYjTpuXaWgL3ZLAeokNh8L8D+AG5/AzG6XSdAnwVA +AA2DWgq2b55UJToIjT4KfKNvxvP8wKmnK22beMpVnKTaysdZcEofT8qSxHchCxw11cRQsM +KsQtfuKgM6opiPRqPAeENbxQRxPpgfcxVU5fYQWEOYeWezeZ2gIZzN0PTrX1TAswoHEW+Y +7WfhgcYwg94D1ZwhqzLfYLNd60dQLjAXjgieiHPSOpIdZo8zXyE5XRVfmK5oyx32FqiXgv +MfTt6dfj75KI7ERaPipm39dglznmQxsDlZCGCy1rSNboOeqAgT1IXiHZh7YhKwbzSaxFnG +VQ28DKh/KmtqhmUsvMbg5P3x67OT2Y8fT36YfTz9dAIIgt2RwRNaMprLGhxIFYGwAJcuVa +TtbdAZQR9eH3+0H4JZomZffQnsB1/GV7ICpi7HsOKpCDfxnQKGDafUdYI4djqARQ8nE/GN +OHj27OUBQSu2xRaAgRl2uuLHmbbwsyRb5eGEOv/MLv4RKy3tz10cfnkpjo5E+HN8E4cB+F +RNV2aJ70m8Pm0LCUMr+Gecq0kQLOUKRPFaosCOn5GfPOEBsCXQM9d2++c8yUw7c6U7BemT +MY0AHGazRRorhZ1nsxCIQAN6/sCAiJ1tlMIxDCy27tCJRgX/lBI2NsMhU/yrB8V4TuMQDU +bRHWI6gfhuFrGS3IuWD+NmM9Rhs9lYTwjCTRIDDhirpVCYLqjDygT8XOI81Glzlaf4K8JH +rUACiEct1Jq4SfooFd3EaS3V2FkUEHE8bpERFW+iiB/BZRmDZW62bjJpU9PwDHQD8qU5aN +WyRTn88wT8H1Bf5lCHBz8+izHNENM/8smDcAAXNET1r1QLCmtLcX5yLl4+P9hD9wbOoEtL +Ha87Wuwkq6X9uILdMvLACPMoIy8uXVaod/Hr4W6Ym8juTJcVVnqLS7nJb+QSsEUGdnZZ/E +AtcFKHdSxi2EXQ8+QfsAo1fmSM51JePUgL+hJAvQ1BMftvtv4JBwdkpkAR8UGbSK2jAGwa +izK/SdD5mG91I9hOUJZoQY2jEzgb5zEZmkjQEOAVZ0ipWxmCOixrdmAJbwSJ9mLZKNaIwJ +2hpr6kH6+z/Dab8cn4CJXueGJZFwVLMy92aLbgiXgHVgiQzOGg1xCNocARQKBs7QHysHxY +LlCWzhoACAy/ouObA8sc/WiJfIrEaRHG5JUg4S0l+g83Zgo6ehliOJCoNQocxUJaAiHB4q +yCs6pBMxnKmukGEzsk8bnuLOIjqQ+gRcUIzOZYQ+NOhn4Xh6CcxZmrlJxxaJE/f/7MbKPW +FG9BxOa4aHQhVmQso2ILhjUBnWA8NI7eEBvcgrMLYGqlWVPsfRR5wd4Z7Oe5lm3wA+C0V1 +XF4f7+7e1tpKMNeXm1r1b7v//DV1/94TnrxOWS+AeW40iLDr1F+9SGHm70tbFA35ida/Fj +kvncSLDGkrw0ck0Rv2/rZJmLw72J1Z/IxY2Zxr+NKwMKZGYmZSoDbUcNRk/V3tPopRqJp2 +Sdbd/xhP0SbVKtFfOtLoyocvAEwG9Z5DWa6oYTlPgCrBuc2JdyXl+FdnLPRppfYKkop2PL +A3svLhEDnzMMXxlTPEMtQWyBFt8h/Q/MNjF5R1pDIHnRRHVO09t+LWaIu3y4vFtf0xEas8 +JEIXegRBwGPZb9fgG0nbuSg3+0a4t2z3Ftew2BsfSBYV7tWI5RcAgX3IupK3UOV6PHC9J0 +y6oZFIyrGkFBg5M4Z2prcGQjQwSJ3o05/PPG6h5Ap1Yk0cQLzC5AD3eejrVrs4LjCSEPHI +kX9EWCi3zYaXvOW1unKQV4WjzqUYUBexuNdjoHvhwbAFMxKn8ccU9zTPnQ2hTegx5gOceE +kMFWHWbCFtcHHD0Z9bBTx+oPjWYa94HATRpzbOpB0AnlI56hVCBNxdgfOcTilrjdyXZaHG +Iqs00k0mpAuNrKo1eodhqmVZKh7nU2KVqkOXjFVisSIzXtvrNA56AhY6YlUJOhIYfT6Yi8 +PU8AQ90Pw2lXNQYe3LgMYrRJFFk3JNMa/gK3guIdFJwCWhI0C+ahUuYv7DeQObte/cMAe1 +hCI0O4XYfckI7F0HAaHwjJqKMzIAUZkLArjOQ6sjpIgcOcDfKEG5rloHQTjEiBnDkWhNQM +4E6N3gEHv0R4I0ISipDvKiUL8YUYwfa1RfVhuvs35VIThBg7HchV0NGLIzey4UQ1jlpRDp ++h/fgG3Z0UOXDwHFweN/DvsrlhWht0AWfdV9wWKdDIFIcZTVxULw1h3ODy746cHg2xzCSG +obyJvCseM9MksNutQcOGGzDenrfn0p/diAWOHYe5OpCbOzj/hWWiFrkKKWbSjl14yo+5Qu +mQEwfeInL0ULzCAk5d4AYCyJu4VEd/D+cgVeEhY/SPyaUHEHpyGAODLf8fc3kUwFjJMi5v +kywkraaJeuTvVwcrS1/P8u1/pDPW/lkyx7Do/rsSpIbuR/dBxlA9wFFdhkqfBYLemIy7YI +8fRhYuDx95vvTF4ctLYBOP5YExh8I+9o83heW2k7uqjNUI+S6Z4z8sKSOgZ9eqoyaGxcXZ +Vt9w6htwPDuUuYKjpfjw8bNAQnDw9zbePm7pjRQgNveuyftjUAdldy+5WqsjdgFEUFUio+ +yHu/mzD+eHI/vYxe1Y2COAPIphdmyKgaT55J+Bs2ujYI695TbD4NqoJdTsKc6/+nLWEy51 +kfzqy9H0UezQJ/bjlntoZ+bMg12rLWWcktJyxlCkMWtYx/YpJqzk6UyoeeyyxxF14sAUED +8cJLyBgnF2CY7D82lDtknvKN/HGoSnjdcOYJ0jbOMx4SaANs/nP8OxWelI202cpHTZAIvf +20Plak78HMTo1x4epOCBJOg7lKmL58ANIYcYJpOecwx5aMcmCt1zNLYWPlZdVJ7oRIPmns +xLHnDvSA/7eNBl3Od853AQHgYP2aTfTK3+ZhrIAvNoMOoj+yA7/jtW+fxfs8gHLsVcb/+G +1jD496yEjQdD08ZjEty/7a7dNcAeYJ4cU7/LMXbcwsMe8UXNvDLOHaskJZ6h7nombimngQ +KueH0EUJbs9/XAwW3UN+Nv6rLk+21SgYUs9/COdiownct4fr0m5onYfy8rxMR2W1AA20n+ +yfvUSKhD0nYlYXOY6JezdW4CWTK7SUoYCwp3HH734fuTcDJkmnDQw63Iw/0GhPsIpg01cc +LHjGEKPWbIPy9Vocehbbtj0gRMmFiTrdc++NFhE1zo34N7wkTeLS7fveOxfbGWi+uZpHwC +ZFMc6kTK32AzYmLTDPwkMRWvKNMNVrJIa6QVO96YoriqswVdmlQS/CudT4z5RZQlwDHBVR +pfiTENXmI8SnMjhazgGKi9z6LMMYNV1Mly/ypZCvlLHad41perFeCCN1q6KeLpKSwl3nKi +A2c2Krmoy6TaAglilesLQcqJcDrOt7zQsYck3/0wATFL4lB8xGVjOxNuacjVfw2Ci8TDOA +5wMhgi+g7tWT7DWWeUCDxlpLqX9fQ5aM+QA4ARAIX1jyY6nOe3SGpybx1pz12iopb0SBn4 +PKihjCcY/uDf6VefEV3eGsDyahjLq91YXrWxvOrF8srH8mo3lq5I4MbaSJaRhL5oVvuuoz +cJxw1E8TQn8WLN/TBBFBNBAaIozAHbyBTnSXvhLr70C6zadm6h6WOTVJNw5mmZc1xcg0Tu +x5stfZg3Ge7OYErR0YN5KcadHUos8sfuRxHlk81pOMvbMq7iyJOLqzSfg9hadKcNgKlo5x +hxADW7mc055NuyVKPz//n03Yf32B1BjUzOA1/JwSaiYcGljJ/F5ZXqSlNz+CuAHamnn51D +wzTAJw8Mtx3qLAM+GVDaBzKOuKW0hVwU4AFQqpft5iZEhWHru86c0t+ZyfkG6kiMsmrULG +qASMfn52+PPx2PKA44+t+RKzCGtr50uPiYHsGw/+Z2txTHMSDUOrbVGD93TR6tG46438Ya +sB0fvvXh4CEGuzdM4K/yX0op2BIgVKQjwo8h1IPPQL/qmNChj2HETkage93Gzoptc2TPcV +Ec0e+7i2hP4N+A4hljBgTQLtTYnAyaw1RL6VvzuoOiDtAH+nq/+gjWPnrtTg6wi+hxAB3K +2m7D7p93ecNGT8nq9cm3p+/PTl+fH3/6znEB0ZX78HH/QJx8/1lQ0ggaMPaJYsyXqDA9CQ +yLWw0lljn8V2PkZ1lXHCSGUW/PzvT1zQbrYTBBGm1OBN85t8lC46AZR6HtR52UhBil+oDk +FB5RDg8VJuF5acNFLyrXSdRUzzRHZ7XWRy9dUGYKz+iyOwLpg84uKRgE551BE6W6V+ZUWP +K1oC7G6kFK22ibLZJSULCTQ+Bcio3ONDO7gdJAx0abwVrRX4QuruFlpIo0gZPcq9DKkh6G +OTMN4+iP9tab8erTgM5wmFl3DPQhbgALtFqvQl6bHj9pGO2XGjBsGOwtrDuTlDNCadmY8S +ZC7MQ3OaG8gx/t1us9ULBhePtX4SYapktg9TEcrsU6gQME8OQarC+eEwBCayf8C4FDJzog +c0zZCN9slnt/CoO+64OffurpXpXp3l9EAacgwflFYQ8x3c5v4eATyUicfHg3CRk5ytcVf6 +qxhgAcEgqAOtJOSU18rT4bK5mudNKJrw+wQfsJ1NwaXsqi1MP7XeMQJeCpGpPX8FQZ+oWY +A2ZhT3EpkxZoLI+wmGGZoZub0Hj2H9cyTXUS/OnbsxPwHbFiAyWI791OYDqOl+C9us7I4z +LIFii8dYfmEtm4RBeWMi+WUXBv0BpFjkZ7yRp+YLg7qhMFLuNEuWiPcdkMy9QYRMjKsBdm +W5m1W32Qwm4fojjKDLPE7LykrFafJ4CX6WvMRyI4K2E9iInA89VyklUmjTFNFqBHQeWCQp +2CkCBxsejRpO1QDDwvlamVgo/Ftkyu1hXebsDgCIWHE+CPP5+dvqdahYOXjdfdw5xTOglM +ObPkCPMGMdoBP7i5gMhVs1kfz+omhIHaB/5pN3HKyhFP0BnHgUX8p93ExWpHzkmQVwAKqi +7a4oEHAGdYn9w0ssC42nNwOy+wweywExjCRZjsD3d9XU60PVumhOI+pvERFzirwuap6cFu +nlony5DXuCrwnms5ngyA7JUte2iBoddDVzKdjLidUoh1s4BRt7c/h0kZ63TVy3GYbYhb6F +irbexPmRMrdfotMhRlIOLYHTxxmaxfCevuzIFebnUHmPhao2sksVeVj37KRtrD8DAZPqeY +gVTbQkYAIxlSFwTV4EOhRQAFQinBY0dyp5NnB94aHWtw/xq17gLb+B0oQp2gS4UfeQmcCD +/8wo4jNxFaqEcPRRi4WYZZbpPH8M/tGr3KF4f32wMKYqLYlXF2JccMa2pgfuETeyAES9rW +I/VFctlnWMQpOKd3AxzelYv+ixODWosRusmLcttWRz55sENvfci9SqMBX8a3oPuLuhrzTg +7cQ/cW2A1DvR8ipiRCV337Pg4xHPNLOLkPcC81NCz08H4ZuIXlvTGOrLWPrVKn0DZoD3ZR +wtGsUnQt41QsGl/UegGNwT1qTP7IftWJQvb3nuIxJyZkgfLkLkhvbSPdoRVOGHENE5eXJp +Qj35TY6LalvJEpGA0wsmMsgfjZlkBMIhtO6c0K+9XYnW/Pt/24UUuD2aGp0UDPTBWwf1Em +q31EpzfiswuzBhnc6p/0kSTOrslLfvPn06l48/4H+Pu1/ACmFCsip+IvgIZ4k5dwvuQSX3 +p7Acs7Kj445rXCskmbD6ifqUC37dyjM16L6LoTv+DEakqBqbblht9GARR5gVT23vgJppoC +fjflXi1v1HiKfZsy0o1Ig+EKGKwa2dc9o3W1SdFeOFGSZjcvRmenb07efzyJqjvkcPPryI +mi+AlZuBx9R1zifdhU2C+LGr9cOo7zdzItevxmfeg01TR46BQhnEsKe9Dkdzdie7iIS4wc +iGK7zBcR9gSW5wK+6hYc6YlzvrzX0HtWFmGNJ/oWrfHm8TNQQ/zUVkQj6Ehj9JpoJCEUz7 +GSjD9Ho2DgYEahbfjn2fXt0o2M65IgWmAb02bVY3+41YVrprOGZzmJ8Dqy22CqRNMkVpv5 +wq0e/JAJ/WwKaDm655CruE4rITOQXDrk0/sVoOndgj+WEGYVNmdUBUdhmvQ23ionCSlWYo +SzjqgEHy9kKGIIZ/Dv42u2B1iJKGoukAbohCidn3JnqKoXa5ZgPhINJR7cJtlLN59HU5gn +5RPyonFkYZ3oNjJGV7LS6+cP48nFi0s/Kr3wyn0XBVg9/3A8WhTPnj0bif+63/thVKI0z6 +/BLQPYvV7LGTUPWG69OLtbXc/etETAj4u1vIAPlxQ9t9/rjEKTO4bShkj7r4ER4t6ElhlN +/5Zd5qBdyRfN3IMvrLTl+DFL6HEkDC1JVLb6jSkMOxlpIpYExRDGapEkIYcpYD+2eY2Veh +hm1Pwi74DjEwQzxVa8IeOj9ho9TEqgtdxj0TkSIwI8otwyno1KnalWDfCcnW81mrPTLKma +IpPn7uWpfiCgsm8eab4S8S1KhllHixhO0afHqo2Hne9kUe/Eki8u3IBja5XcfB/uwNogaf +lqZTCFj2aTFrksF8ac4o4li6RywJh+CIcH01NPZH2ioAelEah3sgpLK9G29Xd2X1xMP9A9 +8p6ZSacPVfb5LA4OxVkrwTCKIq8SRVlCWr41P0xglvcU1taegDeX+J0OqmKFgffKh1vsWG +f69Q7O32ie9AA49GKUVZCWHT0d4TxTZuF7xWvtNzbsEZ1wu0nKqo7TmX4UYoYO28xerGs8 +bZHczvJP662Ak5+DB7ynU/fBcTBZNkhPTL019RpHYqVDFJFbd+aXaBU5enkH7CuBT4GUWc +5MtbQJIl1ceooeY+I6Z9NR8QjqC1PaNOCZm5qa3jIIVS17qiDa6zL1EAPetZ9aSg9eiG/E ++OVUHLSORotii+9BwSKeLkPfRaNhsMSgW3TRfk1DfHMkxi+m4vc7oEcDExweXO6IR7QgDA +J5efmvIK+t0NHPOnRrek0NCeUSmLqsEKagHek9iOoyQr540bni9CTguP3qi4PRZNLe3O4m +fE178J+tOXk6nSf9Ytq9eHJmeUySG95PFTqrDuwvqKtVIpd7TxVuEG+bg/SwWBF+WNT/xK +aI6Xr2pqCHivnmcAS6bbSvo4eNs24nMYXyWmlyTTFqODbX9h0Ek6XTypR0t9yg1yIqAJj1 +3eTxw1chtmtSuF7h4A2vrkGwYCd9Vw8u29iOwXA5VNv9tIKxkwUovzKc3MMoIsS73NCqIV +duHzoPC2KomeiL1h26I4K/OfNwhcPQTWwHy6++3IVnMLyfzTyTjsrYUejhiayt7mi2e3dc +0GOUvqG/SmACv+JDW2Bhn9Mk5/YQk6f5XZzcJlFv8MFKuhhHQ5xK11njAzy/TIbeE0UsKJ +cN9gL8t3qF99g39P7msaKcO3w258uDF1NTrcyA9AJeRi+/0M9U0jCjvH3PfqpPjNCoxx1E +/+E+qVL5o4dfcqBlHbXep/InC0mnT6KZpUPwiDKUJ05EAt91bIjJHr19lOQd+Fhz8K7MA6 +05uIlwDI760HU1RnCvahsQ4PtNxpDkPGhoo0gR6V3CNqQ8dynOR4uCHtVvQTBwgZy/jrkF +HdC6OAzaNgUvXsduMinx1HVv2RvbEzS21XW4a/k8ftfadY/ArtzkUnTW7pe3ujTQY4etaB +8NOKiiCfGgCo1G4/cbE9cOTHUKz2QXOyH53UG40gGzch8YkzCE1w3Enhp7Y/Y38cL9GfPR +9vjR6KYkwKlPdRmjtezD+9yFh3gKnHvjvXpACVVLzYF8SqNX/2acojuTV1dqFuMLlDM62l +M6WefMZg6L7+jBQBmrrTnj4UNKAMJwk078dXP7gTFAV/JL2JyN5XjXgqamnGUnCVolSzYJ ++kAJ4CKO09J4cw/AWcyjVGJ4XdVlUcIZfKTfS+Y0ob7M6gaoCRtuYnVtUDcjpvr5XFKslJ +tmKqA5OtzKMQIisBHvmIbZzLYBrzxvnn5IppYZZFZvZBlXzbNHfkJCAke6ZgaqecfNdYKC +jVS2uMRFLLG84SCFYTn78xdwnPWO8jveephYbfdwdnJTEx/zjIR7PNJcnNzZJw/dp7aW9P +y26x3abg3X2WeeYBvM+32kI3WEjlv1m2L8Di7fH6B/6fAPyLtb+OknwVt1dtkkfLW+7T5w +6sNm/9uQHQ7ovgLZOl7b+X19MexhDnS2VNQ+ea/CaWabNHErzFe9J27l1yQ8Mm7lwX9g3E +q/5AmGRuOj9UBvlcI9AS7zrmHzLGbDCDBmBkTC+/PWo4qBU6Vuc/6LXCV3I/voNetKp5DQ +mAfkyO57aQSCn79UIz8ru3meblfcypcu+vzt2YfXx2dEi9n58Zv/Pv6WcsLwkqZlqx4c2M +vyPab2npd97gb5dB5P3+QNtj2v1nIJ1VAOeycFogdCf7lc34a2FZnbPDSgU3bUHQSI7152 +C+qQyu6F3PHLdImLm73TShM3bydzTq/5zUmMMJ/M/SCLQ3P/Z9qbK5vAvDDWimjfXxvQo0 +60v6pfJh2Itk9sjjftAN7UIH/ZixpTsGOvA9hBaf+vSCgxHYsdzas+IIUL6bwuSQ9LMqjK +/3+elKDsYjzbsaM4te+HUz++lFL2YXy8cV7IqLfacNRd38hLIU4HqBAErPD024mMiNF/+h +rXJj08VeJij+qa91DZXNrfcM+0c/vnBFMbKvsGmeL8KL7chc6rOnXTFeyYzgBy+ugOLF85 +hTSg+faBzo14KmBv9JdYIc63IoSDo3bJMDeX6KgfEHSQR7vpYG9o9VzsDVW9ulWfQrwY7r +hsFZbqEQc8Qt0zQtWmttCxwJgkOlTOKr4hyHyJKujRMc/5wJt7feyHH28uXhxeuvoUm90n +rTCZbeQY9gsnGXTnQ5fOcGKWckrZgnhWm0zaE1yO/DTy4bNNpyJm4PxjsisY0ugBITMzwv +vfA4zamFrWO4QlifFTNaFlOTVEGnf7ZdJdbqO2ukC4HuoBQDoqEGAhmI5unHgXjZhUPn6u +T4Pzmp4Idu+1QkcqKFfN5wgeYXy/Br/2cKpjftBwRtGM5w5tDtRbDsLNvgP38u9Dhk1Ce+ +neXVafC8Al4f3jXzxgfDeL0g4/2OVX214ve8sQ2ZfFxFvMR2qRyHyOwMiA3hyTtsZqDSPo ++ApOQ0eXoZq1IV+g40fJvPgAOB0wyJmdaQ/AGoXg/wAYGSI3 """) ##file activate.sh Only in .: virtualenv.pyc --nextPart5147813.9G4fd4biQ4 Content-Disposition: attachment; filename="sysconfig.py.diff" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="ISO-8859-1"; name="sysconfig.py.diff" --- sysconfig.py~ 2014-03-11 23:13:44.000000000 +0200 +++ sysconfig.py 2014-03-11 23:13:13.000000000 +0200 @@ -29,8 +29,8 @@ 'pypy': { 'stdlib': '{base}/lib/pypy-{pypy_version_short}', 'platstdlib': '{platbase}/lib/pypy-{pypy_version_short}', - 'purelib': '{base}/lib/pypy-{pypy_version_short}', - 'platlib': '{platbase}/lib/pypy-{pypy_version_short}', + 'purelib': '{base}/lib/pypy-{pypy_version_short}/site-packages', + 'platlib': '{platbase}/lib/pypy-{pypy_version_short}/site-packages', 'include': '{base}/include/pypy-{pypy_version_short}', 'platinclude': '{platbase}/include/pypy-{pypy_version_short}', 'scripts': '{base}/bin', --nextPart5147813.9G4fd4biQ4-- --nextPart2551281.1afdmRE7dP Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQJ8BAABCgBmBQJTH3znXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQ5NDhFQzUxMUEyN0YwMzAyRTc5OUI1M0FB RDYzRkE4REQ2QjJEQTU1AAoJEK1j+o3WstpVoEkP/0NkqWz0myKcE1eFaDtTi34n QCZry0cV2Tkoq9LIYh7EGRP5WAsXyXkFdYLblVicogMCz4UTYAWy/bO7f5XJazCM XToTgODchETwgiq6ypzeDt81oVkGwovaY09k1m0827x2vX59v5S8jtUka0CJXArx pgWkWCZm/3KMwqeKvImgLwMNX3ESRwaEzroeCpJM+gI249Eg+AQ2lqe4RbZWP7oM 6g9ckVz0tnrdEORsm/v2fZjT9Q87mhAqLXqMDjZzxIycOz6aWP1YdL9AWIsNAu1v uNgICkt26qV7Nj1nhpKONaM0E8HLRtQCPkZCOB0iTGsWtD8fuM6YJpingySfgqaN loULpc04oPpG5OSv0zO1/jSWuFE0JYhK/H799T5OCqTTaVzPJm3Op+o+iMuTjt8n m/j5eb26ymsIEa8DPFM9oyRwfI0F6+PE71LQKxl9adS9PhcxkBVBY6xJi/lNf9Zp coTcaJv9obKUDcrahrpPZEKVDLF1WE1x8t7m1Y6vPvumW8PciAULD+lbUkx7gsSz oeorMD577BvS5m2j+FUC4FU0LsC+VykboR4dmEwq49+2jmnJhn5X7WHv6oFSTvPN TkNOCM/Nz7deyKHG97YGS2SDHGd7XbjLuMdOd9qSOsbYRTbHAuReUsT4YTWUMyfo 77VjOQhNCEx3XaqY1oYV =1X9y -----END PGP SIGNATURE----- --nextPart2551281.1afdmRE7dP--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1820006.CmSahJhOvA>