1

I've just downloaded Winpython 3.4.4.2 , and I'm trying to use it portably from a flash drive. I'm using git-bash as well. I'm in Win 7 and I set the "path" and "pythonpath" environmental variables to include

F:\WinPython-32bit-3.4.4.2

If I look in the real Scripts folder:

/real/Scripts
$ ls
Activate.ps1      _decimal.pyd      _msi.pyd              _sqlite3.pyd     _testimportmultiple.pyd  easy_install-3.4-script.py     easy_install.exe           pip-3.4-script.py     pip.exe           python3.dll      pywintypes34.dll  tk86t.dll
_bz2.pyd          _elementtree.pyd  _multiprocessing.pyd  _ssl.pyd         _tkinter.pyd             easy_install-3.4.exe           easy_install.exe.manifest  pip-3.4.exe           pip.exe.manifest  python34.dll     select.pyd        unicodedata.pyd
_ctypes.pyd       _hashlib.pyd      _overlapped.pyd       _testbuffer.pyd  activate.bat             easy_install-3.4.exe.manifest  msvcp100.dll               pip-3.4.exe.manifest  pyexpat.pyd       pythoncom34.dll  sqlite3.dll       vcomp100.dll
_ctypes_test.pyd  _lzma.pyd         _socket.pyd           _testcapi.pyd    deactivate.bat           easy_install-script.py         msvcr100.dll               pip-script.py         python.exe        pythonw.exe      tcl86t.dll        winsound.pyd

I've created a virtualenv called 'real'. Now when I try to activate the virtualenv I get:

/real/Scripts
$ source activate.bat                                
sh: @echo: command not found
sh: ./activate.bat: line 4: syntax error near unexpected token `('
sh: ./activate.bat: line 4: `if not defined PROMPT ('

/real/Scripts
$ source activate    
sh: activate: No such file or directory

The activate.bat file starts with:

@echo off
set "VIRTUAL_ENV=F:\envs\virtalenvs\real"
if not defined PROMPT (

    set "PROMPT=$P$G"

)

if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
)

How can I activate the virtualenv ?

user1592380
  • 34,265
  • 92
  • 284
  • 515
  • 1
    "activate.bat" is for cmd.exe. "Activate.ps1" is for PowerShell. You're using bash on Windows, so you'll have to manually copy the POSIX "activate" script from the virtualenv sources. – Eryk Sun May 06 '16 at 19:33
  • Thanks, I've added an answer below – user1592380 May 07 '16 at 15:20

1 Answers1

1

Based on The comment above I grabbed the POSIX "activate" script from the virtualenv sources below:

# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate () {
    unset pydoc

    # reset old environment variables
    if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
        PATH="$_OLD_VIRTUAL_PATH"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi
    if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
        PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
        export PYTHONHOME
        unset _OLD_VIRTUAL_PYTHONHOME
    fi

    # This should detect bash and zsh, which have a hash command that must
    # be called to get it to forget past commands.  Without forgetting
    # past commands the $PATH changes we made may not be respected
    if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
        hash -r 2>/dev/null
    fi

    if [ -n "$_OLD_VIRTUAL_PS1" ] ; then
        PS1="$_OLD_VIRTUAL_PS1"
        export PS1
        unset _OLD_VIRTUAL_PS1
    fi

    unset VIRTUAL_ENV
    if [ ! "$1" = "nondestructive" ] ; then
    # Self destruct!
        unset -f deactivate
    fi
}

# unset irrelevant variables
deactivate nondestructive

VIRTUAL_ENV="$(if [ "$OSTYPE" "==" "cygwin" ]; then cygpath -u 'F:\envs\virtalenvs\venv_name'; else echo '/F/envs/virtalenvs/venv_name'; fi;)"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/Scripts:$PATH"
export PATH

# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "$PYTHONHOME" ] ; then
    _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
    unset PYTHONHOME
fi

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then
    _OLD_VIRTUAL_PS1="$PS1"
    if [ "x" != x ] ; then
        PS1="$PS1"
    else
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
        # special case for Aspen magic directories
        # see http://www.zetadev.com/software/aspen/
        PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
    fi
    fi
    export PS1
fi

alias pydoc="python -m pydoc"

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
    hash -r 2>/dev/null
fi

search in the script for VENV_NAME, than replace with your venv's name ( you may have to double check the file path. Drop the script into your venv's Scripts folder with the name 'activate' and you should be good to go. This worked for me.

user1592380
  • 34,265
  • 92
  • 284
  • 515