使用早期版本的 python 和诗歌
Using earlier version of python with poetry
设置项目和使用尚未安装为系统范围二进制文件的早期版本 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
poetry run python main.py
你试试这个命令。
# Initialize pyenv when a new shell spawns
eval "$(pyenv init -)"
# Modify path for Python's poetry dependency management system
export PATH="$HOME/.poetry/bin:$PATH"
这里讨论和你类似的问题:
https://github.com/python-poetry/poetry/issues/571
事实证明,pyenv 2.x(最近刚刚发布)一切正常。我们现在需要更新 $PATH
以及 $HOME/.pyenv/shims
的新指令 indicate。这是通过以下方式完成的:
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
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
输出:
3.8.9 (default, Sep 14 2021, 18:39:31)
[GCC 11.1.0]
1.21.2
设置项目和使用尚未安装为系统范围二进制文件的早期版本 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
poetry run python main.py
你试试这个命令。
# Initialize pyenv when a new shell spawns
eval "$(pyenv init -)"
# Modify path for Python's poetry dependency management system
export PATH="$HOME/.poetry/bin:$PATH"
这里讨论和你类似的问题: https://github.com/python-poetry/poetry/issues/571
事实证明,pyenv 2.x(最近刚刚发布)一切正常。我们现在需要更新 $PATH
以及 $HOME/.pyenv/shims
的新指令 indicate。这是通过以下方式完成的:
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
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
输出:
3.8.9 (default, Sep 14 2021, 18:39:31)
[GCC 11.1.0]
1.21.2