1
1
#!/usr/bin/env python
2
- """Create a "virtual" Python installation
3
- """
4
-
5
- __version__ = "13.2.0.dev0"
6
- virtualenv_version = __version__ # legacy
2
+ """Create a "virtual" Python installation"""
7
3
8
4
import base64
9
5
import sys
13
9
import re
14
10
import shutil
15
11
import logging
16
- import tempfile
17
12
import zlib
18
13
import errno
19
14
import glob
20
15
import distutils .sysconfig
21
- from distutils .util import strtobool
22
16
import struct
23
17
import subprocess
24
- import tarfile
18
+ from distutils .util import strtobool
19
+
20
+ __version__ = "13.2.0.dev0"
21
+ virtualenv_version = __version__ # legacy
25
22
26
23
if sys .version_info < (2 , 6 ):
27
24
print ('ERROR: %s' % sys .exc_info ()[1 ])
@@ -76,7 +73,7 @@ def get_installed_pythons():
76
73
def get_installed_pythons ():
77
74
try :
78
75
python_core = winreg .CreateKey (winreg .HKEY_LOCAL_MACHINE ,
79
- "Software\\ Python\\ PythonCore" )
76
+ "Software\\ Python\\ PythonCore" )
80
77
except WindowsError :
81
78
# No registered Python installations
82
79
return {}
@@ -298,6 +295,7 @@ def get_installed_pythons():
298
295
# during the bootstrap
299
296
REQUIRED_MODULES .extend (['traceback' , 'linecache' ])
300
297
298
+
301
299
class Logger (object ):
302
300
303
301
"""
@@ -322,16 +320,22 @@ def __init__(self, consumers):
322
320
323
321
def debug (self , msg , * args , ** kw ):
324
322
self .log (self .DEBUG , msg , * args , ** kw )
323
+
325
324
def info (self , msg , * args , ** kw ):
326
325
self .log (self .INFO , msg , * args , ** kw )
326
+
327
327
def notify (self , msg , * args , ** kw ):
328
328
self .log (self .NOTIFY , msg , * args , ** kw )
329
+
329
330
def warn (self , msg , * args , ** kw ):
330
331
self .log (self .WARN , msg , * args , ** kw )
332
+
331
333
def error (self , msg , * args , ** kw ):
332
334
self .log (self .ERROR , msg , * args , ** kw )
335
+
333
336
def fatal (self , msg , * args , ** kw ):
334
337
self .log (self .FATAL , msg , * args , ** kw )
338
+
335
339
def log (self , level , msg , * args , ** kw ):
336
340
if args :
337
341
if kw :
@@ -1005,12 +1009,15 @@ def create_environment(home_dir, site_packages=False, clear=False,
1005
1009
1006
1010
install_activate (home_dir , bin_dir , prompt )
1007
1011
1012
+ install_python_config (home_dir , bin_dir , prompt )
1013
+
1008
1014
def is_executable_file (fpath ):
1009
1015
return os .path .isfile (fpath ) and os .access (fpath , os .X_OK )
1010
1016
1011
1017
def path_locations (home_dir ):
1012
1018
"""Return the path locations for the environment (where libraries are,
1013
1019
where scripts go, etc)"""
1020
+ home_dir = os .path .abspath (home_dir )
1014
1021
# XXX: We'd use distutils.sysconfig.get_python_inc/lib but its
1015
1022
# prefix arg is broken: http://bugs.python.org/issue3386
1016
1023
if is_win :
@@ -1490,7 +1497,6 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear, sy
1490
1497
1491
1498
1492
1499
def install_activate (home_dir , bin_dir , prompt = None ):
1493
- home_dir = os .path .abspath (home_dir )
1494
1500
if is_win or is_jython and os ._name == 'nt' :
1495
1501
files = {
1496
1502
'activate.bat' : ACTIVATE_BAT ,
@@ -1518,6 +1524,10 @@ def install_activate(home_dir, bin_dir, prompt=None):
1518
1524
files ['activate.csh' ] = ACTIVATE_CSH
1519
1525
1520
1526
files ['activate_this.py' ] = ACTIVATE_THIS
1527
+
1528
+ install_files (home_dir , bin_dir , prompt , files )
1529
+
1530
+ def install_files (home_dir , bin_dir , prompt , files ):
1521
1531
if hasattr (home_dir , 'decode' ):
1522
1532
home_dir = home_dir .decode (sys .getfilesystemencoding ())
1523
1533
vname = os .path .basename (home_dir )
@@ -1529,6 +1539,15 @@ def install_activate(home_dir, bin_dir, prompt=None):
1529
1539
content = content .replace ('__BIN_NAME__' , os .path .basename (bin_dir ))
1530
1540
writefile (os .path .join (bin_dir , name ), content )
1531
1541
1542
+ def install_python_config (home_dir , bin_dir , prompt = None ):
1543
+ if sys .platform == 'win32' or is_jython and os ._name == 'nt' :
1544
+ files = {}
1545
+ else :
1546
+ files = {'python-config' : PYTHON_CONFIG }
1547
+ install_files (home_dir , bin_dir , prompt , files )
1548
+ for name , content in files .items ():
1549
+ make_exe (os .path .join (bin_dir , name ))
1550
+
1532
1551
def install_distutils (home_dir ):
1533
1552
distutils_path = change_prefix (distutils .__path__ [0 ], home_dir )
1534
1553
mkdir (distutils_path )
@@ -2220,6 +2239,25 @@ def convert(s):
2220
2239
VF5PnJ+ts3a9/Mz38RpG/AUSzYUW
2221
2240
""" )
2222
2241
2242
+ ##file python-config
2243
+ PYTHON_CONFIG = convert ("""
2244
+ eJyNVV1v2jAUfc+v8NoHJwJSur4hMYlusKIyqIB2rTpkpcQBT2kSOYaCuv73+dpJcDLSlZcY2/fc
2245
+ c8/98OknQu6G0/ltb0T64ztCzgi5HI7JuPejL/8ke7GOI8tiz0nMBUr3ab5cUREnwjhYxlHAVpa1
2246
+ 9ULmE3mWoi56xAmnAdvhJsJ0R5etw18WLcONT1NYh+xJfZdB6K3kykKlHw797ADhNQ0TvJCMAnDq
2247
+ bilPWRwRFgUx+tJF9kUTfXY6CsBg0gAqdCdoBLdb6SbIWHhPTEMv3kO8qEHUMfuMAyPLpwGiOybI
2248
+ CxNrskm9FbWXsU+755k5wKfCp5y7L5wJap/cwqUOem2/ocfX87fFr+jEDWL+7Am70ACsPL7aPrYX
2249
+ kvAf7P6OWWTjVgs3JBMkryP4ssig5zhO4REoKR6OZQm+11TgUhNJWMiSzqWrP3bh77wDDqVKBq5F
2250
+ d0ua5Ol3ZSgx14jVyB2VoygWylftnWQvBZccigoCGkQvydbjNr7rT2fDyRg7ljyRO+9ctizpi6iE
2251
+ QvHBQuljw0rF4YBOQEiXkFRRFVS2q02Pc1WZbEvGhuAVEwkIB90u4GaV3inymHAWKXVr4swMZOa0
2252
+ /7AEZ3bPxzHBitQBywCgjMxGbLWyFnQOPgo5cWuIUaMifuKJtZ03M3aqrQvdW2+WhJ4oTBeFaSnw
2253
+ jFCnBKz2XNXQvq3LwsZfB6Pe9xl23DQJZclnLXCQCaOsd5R1nRz5LJIr/x8t8nGhm8YTgoP45hyB
2254
+ jjk4BjAtXahHKSihS75RgC3K1xsKW0U0Gl4a8dRemz3Mam6eIs/3kVhTpIvgTJpmQ/3efTjTCUFy
2255
+ gDXR00Z2ahTuQX1pwCliqWxfAypde5z64J17fA96GaDu8ezlGpbTlw2GnP/NXr49vctRn8yuetP+
2256
+ N1NxM2aXRSnlwm5DekYgpSHUzQgbGT/m5WF+NRkPpvJl+zmZXtc6qVTVaDi+HkymObP/Fhdg1PZw
2257
+ 5QE6MJBHRG++Owv793Myux0MhvdGkbHANJdZG8cRLQf3QfjZBFfjOlgej6ko/I7JJ9P9eIMAPafK
2258
+ r/owlFmoNylDOM7j8BR/fDoWVfMXV3K1WQ==
2259
+ """ )
2260
+
2223
2261
MH_MAGIC = 0xfeedface
2224
2262
MH_CIGAM = 0xcefaedfe
2225
2263
MH_MAGIC_64 = 0xfeedfacf
@@ -2362,6 +2400,6 @@ def do_file(file, offset=0, size=maxint):
2362
2400
if __name__ == '__main__' :
2363
2401
main ()
2364
2402
2365
- ## TODO:
2366
- ## Copy python.exe.manifest
2367
- ## Monkeypatch distutils.sysconfig
2403
+ # TODO:
2404
+ # Copy python.exe.manifest
2405
+ # Monkeypatch distutils.sysconfig
0 commit comments