6

Python 2.7でゲームを作成していて、ゲームの開発環境の「ブートストラップ」をスクリプト化してから、シャベルを呼び出したいと考えています。virtualenvwrapperが検出されない場合は、virtualenvブートストラップソリューションを使用します。ただし、virtualenvwrapper検出された場合は、代わりに使用したいと思います。

問題は、virtualenvwrapperインラインシェル関数がブートストラップスクリプトに継承されないことです。私の知る限り、これは「mkvirtualenvNotOrion」のようなものの実行を除外します。環境変数「VIRTUALENVWRAPPER_VIRTUALENV」設定されているので(私の場合はmacportsから:) /opt/local/bin/virtualenv-2.7、代わりに直接使用してみました。

#!/usr/bin/env bash

# Name your first "bootstrap" environment:
ENV_NAME=NotOrion
# Options for your first environment:
ENV_OPTS='--no-site-packages --distribute'

unset PYTHONDONTWRITEBYTECODE

function create_virtualenvwrapper_venv {
  echo "installing into virtualenvwrapper directory"
  cd $WORKON_HOME
  $VIRTUALENVWRAPPER_VIRTUALENV $ENV_OPTS $ENV_NAME
  cd -
  #mkvirtualenv $ENV_NAME
  #workon $ENV_NAME
}

function create_standalone_venv {
  # not run/snipped
}

if [ -z "$VIRTUALENVWRAPPER_VIRTUALENV" ]; then
  create_standalone_venv
else
  create_virtualenvwrapper_venv
fi

pip install shovel
shovel help

ブートストラップスクリプトがシャベルのインストールを終了します。ただし、シャベル(最後の行など)を実行すると、警告が発生します。

/Users/me/.virtualenvs/NotOrion/bin/shovel:25: UserWarning: Module argparse was already imported from /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.pyc, but /Users/me/.virtualenvs/NotOrion/lib/python2.7/site-packages is being added to sys.path
import pkg_resources
# normal shovel output snipped

では、どういうわけかスクリプトから「mkvirtualenv」を呼び出すことは可能ですか?そうでない場合、同じ効果があるが警告を生成しないスクリプトから何か他のものを実行できますか?

4

2 に答える 2

12

スクリプトは次のことができるはずです。

# 'which' will print absolute path to virtualenvwrapper.sh
source `which virtualenvwrapper.sh`

私はそれをいくつかの展開スクリプトに使用します。

于 2012-10-28T19:22:59.287 に答える
2

これを行うための「標準的な」方法はないようです。そこで、私は手動でさまざまな可能性のある場所を調べました。散らかっていますが、それが唯一の方法のようです。

function find_virtualenvwrapper {
   # no consistent way to find 'virtualenvwrapper.sh', so try various methods
   # is it directly available in the path?
   virtualenvwrapper_path=$(which virtualenvwrapper.sh)
   if [ $? -eq 0 ]; then
      return
   fi
   # nope; how about something that looks like it in our path?
   # http://stackoverflow.com/questions/948008/linux-command-to-list-all-available-commands-and-aliases
   virtualenvwrapper_cmd=$(compgen -ac | grep -i 'virtualenvwrapper\.sh' | sort | uniq | head -1)
   if [ -n "$virtualenvwrapper_cmd" ]; then
      virtualenvwrapper_path=$(which $virtualenvwrapper_cmd)
      if [ $? -eq 0 ]; then
         return
      fi
   fi
   # still not; Debubuntu puts it in /etc/bash_completion.d
   virtualenvwrapper_path='/etc/bash_completion.d/virtualenvwrapper'
   if [ -e "$virtualenvwrapper_path" ]; then
      return
   fi
   # any other methods to find virtualenvwrapper can be added here
   echo "unable to find virtualenvwrapper.sh or anything that looks like it"
   exit 1
}
于 2012-11-15T13:31:30.270 に答える