63 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Without this patch `virtualenv --python=python2.7 .` fails with an
 | 
						|
error because it notices that the python readline.so is not in the
 | 
						|
same path as python2.7. I assume this is to avoid copying the wrong
 | 
						|
file on systems where it is possible to find incompatible libraries by
 | 
						|
accident. Adding "/nix/store" to the prefix fixes this problem.
 | 
						|
 | 
						|
A sitecustomize.py is created in the virtualenv which makes libraries
 | 
						|
from the python specified by the --python argument available to the
 | 
						|
virtualenv. For example, this makes readline and sqlite3 available
 | 
						|
when a wrapped python is specified. If no --python argument is passed,
 | 
						|
it will only add the path to the python used when building
 | 
						|
`virtualenv`, which is the unwrapped python, so sqlite3 won't be
 | 
						|
available.
 | 
						|
 | 
						|
 | 
						|
diff --git a/src/virtualenv.py b/src/virtualenv.py
 | 
						|
index 4b57cde..afda73f 100755
 | 
						|
--- a/src/virtualenv.py
 | 
						|
+++ b/src/virtualenv.py
 | 
						|
@@ -1071,20 +1071,7 @@ def path_locations(home_dir, dry_run=False):
 | 
						|
 
 | 
						|
 
 | 
						|
 def change_prefix(filename, dst_prefix):
 | 
						|
-    prefixes = [sys.prefix]
 | 
						|
-
 | 
						|
-    if is_darwin:
 | 
						|
-        prefixes.extend(
 | 
						|
-            (
 | 
						|
-                os.path.join("/Library/Python", sys.version[:3], "site-packages"),
 | 
						|
-                os.path.join(sys.prefix, "Extras", "lib", "python"),
 | 
						|
-                os.path.join("~", "Library", "Python", sys.version[:3], "site-packages"),
 | 
						|
-                # Python 2.6 no-frameworks
 | 
						|
-                os.path.join("~", ".local", "lib", "python", sys.version[:3], "site-packages"),
 | 
						|
-                # System Python 2.7 on OSX Mountain Lion
 | 
						|
-                os.path.join("~", "Library", "Python", sys.version[:3], "lib", "python", "site-packages"),
 | 
						|
-            )
 | 
						|
-        )
 | 
						|
+    prefixes = ["/nix/store", sys.prefix]
 | 
						|
 
 | 
						|
     if hasattr(sys, "real_prefix"):
 | 
						|
         prefixes.append(sys.real_prefix)
 | 
						|
@@ -1107,6 +1094,8 @@ def change_prefix(filename, dst_prefix):
 | 
						|
             if src_prefix != os.sep:  # sys.prefix == "/"
 | 
						|
                 assert relpath[0] == os.sep
 | 
						|
                 relpath = relpath[1:]
 | 
						|
+                if src_prefix == "/nix/store":
 | 
						|
+                    relpath = "/".join(relpath.split("/")[1:])
 | 
						|
             return join(dst_prefix, relpath)
 | 
						|
     assert False, "Filename {} does not start with any of these prefixes: {}".format(filename, prefixes)
 | 
						|
 
 | 
						|
@@ -1233,6 +1222,11 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear, sy
 | 
						|
     site_filename_dst = change_prefix(site_filename, home_dir)
 | 
						|
     site_dir = os.path.dirname(site_filename_dst)
 | 
						|
     writefile(site_filename_dst, SITE_PY)
 | 
						|
+    wrapper_path = join(prefix, "lib", py_version, "site-packages")
 | 
						|
+    writefile(
 | 
						|
+        join(site_dir, 'sitecustomize.py',),
 | 
						|
+        "import sys; sys.path.append('%s')" % wrapper_path
 | 
						|
+    )
 | 
						|
     writefile(join(site_dir, "orig-prefix.txt"), prefix)
 | 
						|
     site_packages_filename = join(site_dir, "no-global-site-packages.txt")
 | 
						|
     if not site_packages:
 |