将早期版本的 python 与诗歌结合使用

Mat*_*haq 12 python pyenv python-poetry

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

\n

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

\n

我努力了:

\n
mkdir myproj\ncd myproj\n\neval "$(pyenv init -)"\npyenv install 3.8.9\npyenv local 3.8.9\n\npoetry init --no-interaction --python="3.8.9"\npoetry env use 3.8.9\npoetry add numpy\n\necho \'\nimport sys\nprint(sys.version)\n\nimport numpy\nprint(numpy.__version__)\n\' > main.py\n\npoetry shell\neval "$(pyenv init -)"\npython main.py\n
Run Code Online (Sandbox Code Playgroud)\n

但这给出了:

\n
3.8.9 (default, May  1 2021, 22:43:00)\n[GCC 10.2.0]\nTraceback (most recent call last):\n  File "main.py", line 5, in <module>\n    import numpy\nModuleNotFoundError: No module named \'numpy\'\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
\xce\xbb ls "$(poetry env info --path)/lib"\npython3.9\n\n\xce\xbb grep "version_info" "$(poetry env info --path)/pyvenv.cfg"\nversion_info = 3.9.4.final.0\n
Run Code Online (Sandbox Code Playgroud)\n

Mat*_*haq 3

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

eval "$(pyenv init -)"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)

Poetry 现在可以正确安装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
Run Code Online (Sandbox Code Playgroud)

输出:

3.8.9 (default, Sep 14 2021, 18:39:31)
[GCC 11.1.0]
1.21.2
Run Code Online (Sandbox Code Playgroud)