为了使用科学摄像机,我需要使用一个需要Python 3.9的旧Python模块。
我使用的是最后一个Ubuntu 24.10的PC(随附Python3.12)
我以为与Python 3.9的快速pipenv可以解决问题。
它似乎并不简单...
来自Source
由于不可能通过Apt install安装python的旧版本。 即使使用DeadSnake PPA(附加ADP-REPOSITOR PPA:DEADSNAKES/PPA)也不适用于非LTS Ubuntu ...(Https://github.com/deadeadsnakes/issues/issues/issues/issues/issues/249,) 如果一个人想安装一个旧的python,则它可以从源头开始... (从
https://askubuntu.com/questions/1539019/how-to-now-to-install-python-3-10-on-on-ubuntu-24-10获取了这个想法)
1/安装依赖项:
$ sudo apt install -y build-essential libssl-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libffi-dev zlib1g-dev
$ sudo wget https://www.python.org/ftp/python/3.9.21/Python-3.9.21.tgz
$ sudo tar -xvf Python-3.9.21.tgz
3/编译并安装:
$ cd Python-3.9.21
$ sudo ./configure --enable-optimizations
$ sudo make altinstall`
/usr/local/bin中的Instals:
$ ls -la /usr/local/bin
total 15684
drwxr-xr-x 2 root root 4096 Mar 13 14:09 .
drwxr-xr-x 11 root root 4096 Oct 7 21:03 ..
-rwxr-xr-x 1 root root 101 Mar 13 14:09 2to3-3.9
-rwxr-xr-x 1 root root 99 Mar 13 14:09 idle3.9
-rwxr-xr-x 1 root root 229 Mar 13 14:09 pip3.9
-rwxr-xr-x 1 root root 84 Mar 13 14:09 pydoc3.9
-rwxr-xr-x 1 root root 16029664 Mar 13 14:08 python3.9
-rwxr-xr-x 1 root root 3053 Mar 13 14:09 python3.9-config
我现在已经安装了两个版本的Python!
$ python3 --version
Python 3.12.7
$ python3.9 --version
Python 3.9.21
我创建我的pipenv:
$ pipenv install --python '/usr/local/bin/python3.9'
Creating a Pipfile for this project...
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Locking [dev-packages] dependencies...
Updated Pipfile.lock (702ad05de9bc9de99a4807c8dde1686f31e0041d7b5f6f6b74861195a52110f5)!
Installing dependencies from Pipfile.lock (2110f5)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
但:
$ pipenv run python --version
Python 3.12.7
python 3.9.21:' - (我做错了什么? NB:我也尝试了
$ pipenv install --python3.9
但是收到了一条错误消息。不知道为什么,不确定这是什么意思...
Creating a Pipfile for this project...
Installing --python3.9...
Resolving --python3.9...
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 102, in __init__
req = REQUIREMENT.parseString(requirement_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pyparsing/util.py", line 256, in _inner
return fn(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pyparsing/core.py", line 1190, in parse_string
raise exc.with_traceback(None)
pipenv.patched.pip._vendor.pyparsing.exceptions.ParseException: , found '-' (at char 0), (line:1, col:1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_internal/req/constructors.py", line 367, in _parse_req_string
req = get_requirement(req_as_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_internal/utils/packaging.py", line 45, in get_requirement
return Requirement(req_string)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 104, in __init__
raise InvalidRequirement(
pipenv.patched.pip._vendor.packaging.requirements.InvalidRequirement: Parse error at "'--python'":
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/pipenv", line 8, in <module>
sys.exit(cli())
^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/cli/options.py", line 58, in main
return super().main(*args, **kwargs, windows_expand_args=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/cli/command.py", line 209, in install
do_install(
File "/usr/lib/python3/dist-packages/pipenv/routines/install.py", line 212, in do_install
pkg_requirement, _ = expansive_install_req_from_line(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/utils/dependencies.py", line 996, in expansive_install_req_from_line
parts = parse_req_from_line(pip_line, line_source)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_internal/req/constructors.py", line 395, in parse_req_from_line
req: Optional[Requirement] = _parse_req_string(req_as_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_internal/req/constructors.py", line 381, in _parse_req_string
raise InstallationError(msg)
pipenv.patched.pip._internal.exceptions.InstallationError: Invalid requirement: '--python3.9'
我的盒子上通常使用各种Python版本。我只是依靠标准库中的好旧
venv
cd path_to_your_project
python3.9 -m venv venv # creates a virtual environment based on python3.9
. venv/bin/activate # activates that environment
从该点开始,
python
将是3.9版本,pip