使用 Python3 运行 Python2 程序?

使用 Python3 运行 Python2 程序?

编辑:下面的更新,风景似乎发生了很大的变化。


我有 Ubuntu 20.04,并手动安装了 Python 3.10。系统中已经有 Python 2,如果我简单地python在命令行中执行,而不是,我就会得到这个结果python3。但是,我似乎只有一个特定于 Python3 的 pip 版本。

我有一个想要运行的程序(chirp),它是用 python2 编写的。它抱怨缺少串行库:

$ ./chirpw
Traceback (most recent call last):
  File "./chirpw", line 24, in <module>
    from chirp.drivers import *
  File "/home/simon/chirp-daily-20220103/chirp/drivers/idrp.py", line 16, in <module>
    import serial
ImportError: No module named serial

但是,如果我尝试使用 pip 获取该模块,我最终会运行 pip3 并获取该模块的 python3 版本。

我应该如何具体地向 python2 添加一个库(并确保获取的库是 python2 库)?

我认为“最佳”方法可能是专门为这个特定程序创建一个虚拟环境,但我也不知道在已有程序的情况下该如何做到这一点。

任何指点都值得感激。


编辑。我​​找到了这个页面:设置 pipenv 和虚拟环境我似乎已经取得了进步。我现在似乎有一个围绕 /usr/bin/python(即 python2.7)构建的实际虚拟环境,并且使用它,pip -install serial 可以工作。但是,执行此操作后,它现在抱怨找不到模块 gtk,并且加载该模块的尝试失败,提示没有这样的模块:

(venv) :~/chirp-daily-20220103$ python -m pip install gtk
DEPRECATION:[...]
ERROR: Could not find a version that satisfies the requirement gtk (from versions: none)
ERROR: No matching distribution found for gtk

接下来我尝试了 flatpak 版本,但 flatpak 对我来说根本不起作用。我会就此提出另一个问题,因为我们现在已经偏离了我最初问题的主题。

感谢所有提供帮助的人:)

答案1

我们已经知道啁啾也提供 Flatpak 和此安装方法更容易

但是如果您仍然想从源 tar-ball 继续安装 - 请使用以下命令:

sudo apt-get update
sudo apt-get install python2 python2-dev python-is-python2

cd ~/Downloads
# three below command will download old packages from 18.04 LTS repository
wget -c http://archive.ubuntu.com/ubuntu/pool/main/p/pyserial/python-serial_3.4-2_all.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/p/pygtk/python-gtk2_2.24.0-5.1ubuntu2_amd64.deb
sudo apt-get install ./python-serial_3.4-2_all.deb ./python-gtk2_2.24.0-5.1ubuntu2_amd64.deb

wget -c https://trac.chirp.danplanet.com/chirp_daily/LATEST/chirp-daily-20220103.tar.gz
tar -xf chirp-daily-20220103.tar.gz
cd chirp-daily-20220103/
sudo python2 setup.py install

然后从应用程序或 Brisk 菜单启动 CHIRP。

答案2

您可以pip通过执行 来通过 Python运行python -m pip。这将运行 Python 2 版本。例如,如果python转到 Python 2,并且想要使用 Python 2 版本来pip安装pyserial库,您可以执行以下操作:

$ python -m pip install pyserial

要了解其作用,请参阅Python 手册页

-m module-name
       Searches sys.path for the named module and runs
       the corresponding  .py  file  as  a script.

相关内容