【问题标题】:Run virtualenvwrapper commands from python script从 python 脚本运行 virtualenvwrapper 命令
【发布时间】:2018-09-15 17:05:33
【问题描述】:

当我尝试像这样使用mkvirtualenv(virtualenvwrapper 命令)和os.system 创建新的 Python 3 虚拟环境时

import os
os.system('mkvirtualenv foo')

什么都没有发生。

os.system("mate-terminal -e 'workon foo'")

也不行。

关键是快速创建一个新的虚拟环境,并在以后为每个项目处理它(这是一个自动化脚本)。 virtualenvwrapper 是最方便的选择。

【问题讨论】:

标签: python python-3.x virtualenv virtualenvwrapper


【解决方案1】:

mkvirtualenvworkon 命令是 shell 函数,而不是 PATH[0] 中的可执行文件。 要使它们在您执行它们的 shell 中可用,您需要获取定义它们的 virtualenvwrapper.sh shell 脚本。您最好直接致电virtualenv /path/to/foo

不过,如何激活该 virtualenv 是另一回事,并且取决于您要在其中使用它的上下文。如果您在子进程中激活它,则使用它的每个进程都必须在该子进程中或在该子进程下运行。

第, dtk

PS 另外,你可能会查看subprocess 模块(甚至是第三方sh)来调用外部程序。快乐编码:)

[0]:在终端中查看 $ which workon$ which bash

【讨论】:

  • 不幸的是, subprocess 和 sh 都没有帮助(找不到完美的解决方案)。但是, os.system('python3 -m venv foo') 效果很好,唯一的缺点是它无法自动激活它。 os.system("mate-terminal -e '.bin/activate'") 失败(权限被拒绝)。换句话说,现在一切都几乎完美了,除了我每次都需要在弹出的终端窗口中输入“workon foo”。感谢您的建议。
  • subprocesssh 不能解决一般问题,但是它们是调用外部程序的更好接口。
  • permission denied 问题似乎与您如何使用-e/-x 执行命令有关(也许source/. 是shell 内置插件而不是可执行文件; ))。而且由于您以这种方式生成的终端在完成提供的命令后无论如何都会关闭,您可能想为这个问题打开一个新问题?
【解决方案2】:

bash shell 脚本中的以下代码

env_name="<your env name>"
echo "Create virtual environment"
source `which virtualenvwrapper.sh`
mkvirtualenv $env_name -p python<$version>
source $HOME/.virtualenvs/$env_name/bin/activate
workon $env_name

然后从终端 source test.sh 运行 bash 脚本(例如:test.sh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2019-02-08
    • 2016-12-15
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多