有什么方法可以在虚拟环境激活后将命令写到虚拟环境中吗?例如,假设我有一个Python或Bash脚本,它可以做一些事情,比如
例如,我正在做这样的事情:
activate_this = subprocess.call("/bin/bash --rcfile " + "/home/" + os.getlogin() + "/mission-control/venv/bin/activate", shell=True)
process = execfile(activate_this, dict(__file__=activate_this))
process.communicate(subprocess.call(virtualenv.create_bootstrap_script(textwrap.dedent
("""
import subprocess
subprocess.call("pip install -r " + os.environ['VIRTUAL_ENV'] + "/requirements.txt", shell=True)
"""
))))我想在激活环境之后安装requirements.txt文件,但是在创建虚拟环境之后,无法让子进程模块与shell通信。我认为这可能与我通过execfile创建一个新的虚拟环境有关,因此它正在创建一个新的过程。
另外,我知道shell=True是一个糟糕的实践,但是现在我并不关心非净化输入的可能性。
发布于 2015-10-28 18:37:04
首先,感谢@Ryne Everett的帮助。因此,我通过放弃Python解决方案并创建一个Bash文件来解决这个问题,我在Python脚本中的子进程中调用了这个文件。子进程调用执行Bash文件,该文件处理虚拟环境中的创建和执行。我不知道如何只用Python来解决这个问题。我相信有一个办法,但这似乎是一个更简单的解决办法。Bash脚本如下:
#!/bin/bash
MISSION_CONTROL="$PWD"
if [ ! -d "$MISSION_CONTROL/venv" ]; then
virtualenv $MISSION_CONTROL/venv --no-site-packages
echo "Welcome to Mission Control..."
/bin/bash --rcfile $MISSION_CONTROL/venv/bin/activate
fi
if [ -d "$MISSION_CONTROL/venv" ]; then
pip install -r $MISSION_CONTROL/requirements.txt
fi编辑:这对那些试图做类似事情的人也很有用:How to source virtualenv activate in a Bash script
发布于 2015-10-28 17:08:59
. "$VIRTUAL_ENV/bin/activate"
pip install -r "$VIRTUAL_ENV/requirements.txt"https://stackoverflow.com/questions/33396725
复制相似问题