首页 > 解决方案 > 将早期版本的 python 与诗歌一起使用

问题描述

设置项目和使用尚未作为系统范围二进制文件安装的早期版本的 Python 的过程是什么?

理想情况下,poetry add <package>应该安装到以前版本的 python,并且poetry shell应该打开一个具有正确版本的虚拟环境。

我努力了:

mkdir myproj
cd myproj

eval "$(pyenv init -)"
pyenv install 3.8.9
pyenv local 3.8.9

poetry init --no-interaction --python="3.8.9"
poetry env use 3.8.9
poetry add numpy

echo '
import sys
print(sys.version)

import numpy
print(numpy.__version__)
' > main.py

poetry shell
eval "$(pyenv init -)"
python main.py

但这给出了:

3.8.9 (default, May  1 2021, 22:43:00)
[GCC 10.2.0]
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'

...表明python运行的正确版本(如预期的那样),但该软件包未安装到 python 3.8.9。的确:

λ ls "$(poetry env info --path)/lib"
python3.9

λ grep "version_info" "$(poetry env info --path)/pyvenv.cfg"
version_info = 3.9.4.final.0

标签: pythonpyenvpython-poetry

解决方案


事实证明,pyenv 2.x(最近发布)一切正常。新指令表明$PATH我们现在也需要更新$HOME/.pyenv/shims. 这是通过以下方式完成的:

eval "$(pyenv init -)"
eval "$(pyenv init --path)"

诗歌现在正确安装python3.8$(poetry env info --path)/lib而不是python3.9(?!)。目前还不清楚为什么诗歌首先会这样做,但我认为这是一个 pyenv 1.x 错误。


完整示例:

eval "$(pyenv init -)"
eval "$(pyenv init --path)"

mkdir myproj
cd myproj

pyenv install 3.8.9
pyenv local 3.8.9
poetry init --no-interaction --python="3.8.9"
poetry env use 3.8.9
poetry add numpy

echo '
import sys
print(sys.version)

import numpy
print(numpy.__version__)
' > main.py

poetry run python main.py

输出:

3.8.9 (default, Sep 14 2021, 18:39:31)
[GCC 11.1.0]
1.21.2

推荐阅读