I'm using zc.buildout to generate a script called "test". I'm using that script to call my own test runner. (The available test runners for buildout do not yet use the new "discovery" feature in Python 2.7.)
Anyhow, here's the relevant section in my .cfg file:
[test]
recipe = buildout_script
template = runtests.sh.in
target = test
Here is what my runtests.sh.in template looks like
#!/bin/bash
python %(directory)s/src/runtests.py
And here is the resulting output that is placed in my bin folder as bin/test
.
!/bin/bash
python /Users/myname/projects/myproject/trunk/www/src/desktop/src/runtes开发者_如何学编程ts.py
When I execute this script, it's using the system Python instead of the Python in my bin folder.
The relevant section for that in my .cfg file is:
[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}
How do I get my script to use bin/python instead of the system python?
In your bash script, your are relying upon $PATH
to determine which python to use. To change which python is invoked, you have several choices:
Modify your environment to prefer a different version, i.e. in ~/.bashrc, add
export PATH=/path/to/desired/python/bin:$PATH
(of course with the appropriate substitutionsModify your bash script to explicitly state the path to python, thus avoiding using
$PATH
at all.Remove the explicit invocation of python, and change the sha-bang in the python script to select the appropriate version. (also, make sure the python script is marked executable).
You need to substitute the value of ${buildout:executable}
into the template. I'm not sure how you refer to that using the buildout_script recipe, perhaps %(executable)s
?
精彩评论