1
>> which python
/usr/bin/python
>> python --version
Python 2.4.x

我的问题很简单,如何在不同的 python 安装(例如 /usr/bin/python26)上运行 python 程序?

我希望能够使用与默认安装不同的 python 安装来运行 Scrapy,但这个问题适用于在类 Unix 系统上运行的任何用 Python 编写的程序。

编辑:为了澄清,我想运行一个其他人编写的已安装程序,通常这样运行:

scrapy crawl blaha

不像这样:

python scrapy crawl blaha
4

3 回答 3

6

通常,在 Unix 系统下,您有多个 Python 可执行文件,例如,在我的系统上:

which python
/usr/bin/python
which python2
/usr/bin/python2

可执行文件的名称给出了应用程序的版本。这是PEP 394 中定义的不同 Python 版本的标准。要提示您的脚本应该使用哪个版本,通常的做法是提供一个 hashbang。例如,在我的系统上,Python 3.x 是默认的 Python,所以如果我编写 2.x 脚本,我会添加:

#!/usr/bin/env python2

然后,当我的脚本运行 ( ./some_script.py) 时,它将使用 Python 2.7.3。

你应该避免使用,#!/usr/bin/env python因为它会在不同的系统上做不同的事情。如果他们遵循规范,#!/usr/bin/env python2则应该指向 2.x 并且#!/usr/bin/env python3应该指向 3.x - 在 Arch 下这可以正常工作(仅python指向 3.x(不寻常)也是如此)。

更新您的编辑:

如果你想这样做,最简单的方法是在你的系统路径中创建一个可执行文件,它只运行命令python some_script ...

这是定期完成的,例如,eclipse在我的系统实际运行时/usr/bin/eclipse- 一个包含以下内容的 bash 脚本:

#!/bin/bash
export ECLIPSE_HOME=/usr/share/eclipse
export GDK_NATIVE_WINDOWS=true
${ECLIPSE_HOME}/eclipse "$@"

因此,对于您的问题,只需在路径中的某处(比如说/usr/bin/scrapy)制作一个脚本,其中包含:

#!/bin/bash
python2 scrapy "$@"

我会注意到,在未来,您应该尽可能多地预先提供有关您的问题的信息,而不是在得到答案后更改它。

于 2012-05-10T12:22:54.040 回答
1

你是如何运行你的程序的?它是否设置了执行位并且您有第一行:

#!/usr/bin/python

然后,好吧,就这样做:

#!/usr/bin/python26

或者,您可以这样做:

>> python26 your-awesome-python-script.py

关于您的编辑:由于您不能/不想更改第三方程序(scrapy),您需要:

  • 重新链接/usr/bin/pythonls -l在上面做一个。你会看到它指向python24可执行文件,做一个ln -s /usr/bin/python /usr/bin/pythonXY或类似的重新链接这个)
  • scrapy在您的.profile
  • 创建你自己的scrapy shell脚本来执行正确的咒语(例如用你喜欢的解释器运行脚本)
于 2012-05-10T12:24:39.000 回答
1

您可以查看VirtualEnv,它旨在让您在安装时使用不同版本的 python。

如果你想使用已经安装的python版本,如果你想使用python2.6 ,只需使用python2.6而不是。python

于 2012-05-10T12:24:49.637 回答