Michael Elsdörfer avatar Michael Elsdörfer committed ae05ce7

Make sure that paths added via 'add2virtualenv' always end up being listed *before* regularily installed packages in sys.path. This ensures that you can always use the command to replace an installed package with a out-of-virtualenv version.

Comments (0)

Files changed (1)


         return 1
-    path_file="$site_packages/virtualenv_path_extensions.pth"
+    # Prefix with _ to ensure we are loaded as early as possible,
+    # and at least before easy_install.pth.
+    path_file="$site_packages/_virtualenv_path_extensions.pth"
     if [ "$*" = "" ]
         return 1
-    touch "$path_file"
+    if [ ! -x "$path_file" ]
+    then
+        echo "import sys; sys.__plen = len(sys.path)" >> "$path_file"
+        echo "import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)" >> "$path_file"
+    fi
     for pydir in "$@"
         absolute_path=$(python -c "import os; print os.path.abspath(\"$pydir\")")
             echo "Warning: Converting \"$pydir\" to \"$absolute_path\"" 1>&2
-        echo "$absolute_path" >> "$path_file"
+        contents=$(cat "$path_file")
+        echo "$contents" | sed "1a $absolute_path" > "$path_file"
     return 0
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.