質問

I recently came across this in a cron script at my place of work:

/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"

This is for a system-wide (multi-user) installation of Pythonbrew.

It works. But please tell me there's a better way.

Addendum

To clarify what I'm looking for: I'd like a one-line command to run my script though a virtualenv tied to pythonbrew. With virtualenv alone, I could do something like this:

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

What I don't want is another script to run my script (like that cron command above).

役に立ちましたか?

解決

I believe it can be done by using the python binary directly from you pythonbrew virtual environment. By default its in ~/.pythonbrew/venvs/Python-<version>/<name of venv>/bin/python But I think you can change the path with an environmental variable.

So just change the first half of the line you added to reference the pythonbrew virtual environment python binary and it should work.

他のヒント

On the first line on your python script add a shebang (#!) followed by a path to your target python. Then make the python script executable. It can then be executed directly from the command line (crontab, another bash script, whatever).

make a virtual env in your temp dir:

$ cd /tmp
$ virtualenv venv

the path to your python in that venv is /tmp/venv/bin/python

Using an editor create a simple script containing all of the following:

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

Save it in your home directory as "mypyscript.py"

make it executable:

$ chmod 755 mypyscript.py

Now you should be able to execute it using the filename directly on the command line:

$ ./mypyscript.py
hello world

Do this to your someapp.py substituting the relevant path to your python and that should work.

The trick turned out to be locating the pythonbrew virtualenv's python binary. Mark's answer pointed me in the right direction. But here's a complete rundown for future reference:

With pythonbrew installed, I did the following (as root on the server):

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

I had a pip freeze file, so I set up my virtualenv using that:

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

Now my python binary can be found at /usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python. So to run my script:

/usr/local/pythonbrew/venvs/Python-2.6.6/myapp/bin/python /opt/myapp/bin/myapp.py
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top