智能地使用正确的python解释器

智能地使用正确的python解释器,python,Python,在Makefile中,我使用默认python调用python脚本,它包含了我所需的所有模块,如下所示 python test.py 它以前可以工作,但其他一些包向系统中添加了一个新的python,并在构建过程中更改了env路径以使用这个新的python,我的Makefile开始失败 我可以硬编码正确的python路径,如下所示,但这不是分发包时的解决方案 /path/to/correct/python test.py 有没有一种方法可以智能地调用包含我所有模块的python解释器。可能需要检

在Makefile中,我使用默认python调用python脚本,它包含了我所需的所有模块,如下所示

python test.py
它以前可以工作,但其他一些包向系统中添加了一个新的python,并在构建过程中更改了env路径以使用这个新的python,我的Makefile开始失败

我可以硬编码正确的python路径,如下所示,但这不是分发包时的解决方案

/path/to/correct/python test.py

有没有一种方法可以智能地调用包含我所有模块的python解释器。可能需要检查系统中可用的所有python解释器,并测试它们是否有必要的模块,然后使用
组合使用该解释器执行脚本,其中-python
for循环通过这些结果和导入所需包的简单测试表达式应该可以实现这一点。将所有这些都打包到一个Makefile中,就完成了

下面是我的机器中的一些示例,您可以使用它们来构建解决方案

$ which -a python
/usr/miniconda/bin/python
/usr/bin/python

$ python -c 'import requirement' > /dev/null 2>&1  && echo "This one works" || echo "This one does not work"
This one does not work

$ python -c 'import sys' > /dev/null 2>&1  && echo "This one works" || echo "This one does not work"
This one works

当然,最好在Makefile中执行类似于
$(PYTHON)test.py
的操作,然后使用
make PYTHON=/path/to/correct/PYTHON
进行调用,这样可能会更简单,更不容易出错,我得出结论,指定Python解释器的最佳方法是使用以下shebang行:

#!/usr/bin/env python
使用这个python3替代方案

#!/usr/bin/env python3
显然,在没有Cygwin的Windows上,您必须确保“正确”的一个在
路径中

为了安装您的需求,您必须运行:

python -m pip -r requirements.txt
上面的命令是“pip”更好的替代方法,因为它避免了pip可执行文件可能无法在您希望的相同python环境中安装内容的情况


另一个解决方案是使用虚拟环境,但这对于快速入门来说可能太难了。

virtualenv是您的一个选项吗?@sb9否。不能使用virtualenvHow解决了OPs问题,它不会仍然调用路径上较早的新python,而不使用/path/to/correct/python吗?