3

我最近在工作地点的一个 cron 脚本中遇到了这个问题:

/bin/bash -c "[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc && pythonbrew use 2.6.7 && pythonbrew venv use someapp && python /opt/someapp/bin/someapp.py"

这适用于 Pythonbrew 的系统范围(多用户)安装。

有用。但请告诉我有更好的方法。

附录

为了澄清我在寻找什么:我想要一个通过与 pythonbrew 绑定的 virtualenv 来运行我的脚本的单行命令。单独使用 virtualenv,我可以做这样的事情:

/opt/someapp/venv/bin/python /opt/someapp/bin/someapp.py

我不想要的是另一个脚本来运行我的脚本(就像上面的那个 cron 命令)。

4

3 回答 3

1

我相信可以通过直接从您的pythonbrew虚拟环境中使用 python 二进制文件来完成。默认情况下它在~/.pythonbrew/venvs/Python-<version>/<name of venv>/bin/python 但我认为您可以使用环境变量更改路径。

因此,只需更改您添加的行的前半部分以引用pythonbrew虚拟环境 python 二进制文件,它应该可以工作。

于 2013-05-16T18:02:07.183 回答
1

在你的 python 脚本的第一行添加一个 shebang (#!),然后是你的目标 python 的路径。然后使python脚本可执行。然后可以直接从命令行(crontab、另一个 bash 脚本等)执行它。

在您的临时目录中创建一个虚拟环境:

$ cd /tmp
$ virtualenv venv

在那个venv中你的python的路径是/tmp/venv/bin/python

使用编辑器创建一个包含以下所有内容的简单脚本:

#!/tmp/venv/bin/python
print("hello world")

将其保存在您的主目录中为“mypyscript.py”

使其可执行:

$ chmod 755 mypyscript.py

现在您应该能够直接在命令行上使用文件名执行它:

$ ./mypyscript.py
hello world

对您的 someapp.py 执行此操作,将相关路径替换为您的 python,这应该可以工作。

于 2013-05-16T20:53:32.640 回答
1

原来的诀窍是找到 pythonbrew virtualenv 的 python 二进制文件。马克的回答为我指明了正确的方向。但这里有一个完整的纲要供将来参考:

安装了pythonbrew 后,我执行了以下操作(如root在服务器上):

pythonbrew install 2.6.6
pythonbrew switch 2.6.6
pythonbrew venv create --no-site-packages myapp

我有一个 pip freeze 文件,所以我使用它设置了我的 virtualenv:

/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/pip install -r /tmp/requirements.pip

现在我的 python 二进制文件可以在/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python. 所以要运行我的脚本:

/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python /opt/myapp/bin/myapp.py
于 2013-05-22T18:46:27.813 回答