所以,再一次,我做了一个很好的python程序,让我的生活变得更轻松,节省了大量的时间。当然,这涉及到virtualenv,用virtualenvwrapper的mkvirtualenv
函数制作。该项目有一个requirements.txt文件,其中包含一些必需的库(请求也是:D),如果没有这些库,程序将无法运行。
我正在尝试添加一个bin/run-app
可执行shell脚本,它将在我的路径中(实际上是符号链接)。现在,在这个脚本里面,我需要切换到virtualenv才能运行这个程序。所以我把它放在
#!/bin/bash
# cd into the project directory
workon "$(cat .venv)"
python main.py
文件.venv
包含virtualenv名称。但是当我运行这个脚本时,我得到workon: command not found
错误。
当然,我在我的bashrc中提供了virtualenvwrapper.sh,但它在这个shell脚本中似乎没有。
那么,我如何在这里访问这些virtualenvwrapper函数?或者我这样做是错误的吗?你如何启动你的python工具,每个工具都有自己的virtualenv!?
答案 0 :(得分:67)
只需在脚本中找到virtualenvwrapper.sh
脚本,即可导入virtualenvwrapper的函数。然后,您应该能够在脚本中使用workon
函数。
也许更好,您可以创建一个shell脚本(例如,您可以将其命名为venv-run.sh
)以将任何Python脚本运行到给定的virtualenv中,并将其放在/usr/bin
,{{1}中},或/usr/local/bin
中的任何目录。
这样的脚本可能如下所示:
PATH
可以像#!/bin/sh
# if virtualenvwrapper.sh is in your PATH (i.e. installed with pip)
source `which virtualenvwrapper.sh`
#source /path/to/virtualenvwrapper.sh # if it's not in your PATH
workon $1
python $2
deactivate
答案 1 :(得分:7)
我找不到在shell中触发virtualenvwrapper
命令的方法。但这个技巧可以帮助:假设你的环境。 name为myenv
,然后在脚本开头放置以下行:
ENV=myenv
source $WORKON_HOME/$ENV/bin/activate
答案 2 :(得分:1)
这是一个known issue。要解决此问题,您可以将脚本的内容设为一个函数,并将其放在~/.bashrc
或~/.profile
function run-app() {
workon "$(cat .venv)"
python main.py
}
答案 3 :(得分:1)
这是一个超级旧线程,我遇到了类似的问题。我出于好奇开始研究一种更简单的解决方案。
gnome-terminal --working-directory='/home/exact/path/here' --tab --title="API" -- bash -ci "workon aaapi && python manage.py runserver 8001; exec bash;"
--working目录强制默认情况下在选项卡下打开该选项卡,而-ci强制该选项卡像交互界面一样工作,从而解决了venvwrapper无法正常工作的问题。
您可以依次运行其中的许多项。它将打开选项卡,为它们提供别名,然后运行所需的脚本。
当我在终端中键入startdev时,我个人将别名放入bashrc中以便执行此操作。
我之所以喜欢它,是因为它简单,易于复制,灵活,并且不需要摆弄任何变量。
答案 4 :(得分:0)
如果您的Python脚本需要特定的virtualenv,那么将其安装/存放在virtualenv的bin
目录中。如果您需要在环境之外访问该脚本,那么您可以创建符号链接。
bin
的main.py:
#!/path/to/virtualenv/bin/python
import yourmodule
if __name__=="__main__":
yourmodule.main()
路径中的符号链接:
pymain -> /path/to/virtualenv/bin/main.py
在bin / run-app中:
#!/bin/sh
# cd into the project directory
pymain arg1 arg2 ...
答案 5 :(得分:0)
显然,我这样做是错误的。我不应该在.venv文件中保存virtualenv的名称,而应该使用virtualenv的目录路径。
(cdvirtualenv && pwd) > .venv
在bin/run-app
,我把
source "$(cat .venv)/bin/activate"
python main.py
而且是的!
答案 6 :(得分:0)
将这些行添加到.bashrc或.bash_profile
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
然后重新打开终端并尝试
答案 7 :(得分:0)
您也可以直接调用virtualenv的python可执行文件。首先找到可执行文件的路径:
$ workon myenv
$ which python
/path/to/virtualenv/myenv/bin/python
然后从shell脚本调用:
#!/bin/bash
/path/to/virtualenv/myenv/bin/python myscript.py