python - 将早期版本的 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
解决方案
事实证明,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
推荐阅读
- mit-scheme - 在 MIT 方案中,(null?lst) 和 (null?(cdr lst)) 有什么区别?
- node.js - 使用 localstorage 而不是数据库来避免对服务器的请求
- apache-pig - Pig Query - 在 AWS EMR 中给出不一致的结果
- javascript - 如何在 Node 中运行两个查询并将它们传递给渲染函数?
- java - 在 arraylist 上使用分隔符
- python - 比较 xarray 与 NumPy 的性能
- flutter - 如何在 Flutter 中测试流中有延迟的 StreamBuilder?
- vbscript - 如何将随机字母大写?
- python - 将 unix 时间转换为 mysql 日期时间并包括毫秒
- php - 针对 MySQL 数据库验证用户不工作