Mat*_*haq 12 python pyenv python-poetry
设置项目并使用尚未作为系统范围二进制文件安装的早期版本的 Python 的过程是什么?
\n理想情况下,poetry add <package>应该安装到以前版本的 python,并且poetry shell应该打开一个具有正确版本的虚拟环境。
我努力了:
\nmkdir 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\nRun Code Online (Sandbox Code Playgroud)\n但这给出了:
\n3.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\'\nRun Code Online (Sandbox Code Playgroud)\n...表明python运行的版本正确(如预期),但该包未安装到 python 3.8.9。的确:
\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\nRun Code Online (Sandbox Code Playgroud)\n
事实证明,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)
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |