【问题标题】:How do i make pyinvoke use python3?我如何让 pyinvoke 使用 python3?
【发布时间】:2016-02-06 11:31:55
【问题描述】:
此问题与this one 类似,但不完全相同。
我已经安装了 python2.7 和 python3.5。我可以从命令行使用其中任何一个来运行脚本。我当前的默认“python”是python2。
我有一个需要运行的使用 pyinvoke 的 python3 脚本,通常使用命令行中的命令 invoke <task> 运行。即使我设置了一个使用python3的虚拟环境,invoke仍然使用python2。
我认为我在虚拟环境中缺少一些东西?
我现在唯一的解决方法是只为 python3 安装 pyinvoke。然后会在python3下运行。
有人知道如何设置它以使用虚拟环境吗?
【问题讨论】:
标签:
python
python-3.x
virtualenv
pyinvoke
【解决方案1】:
我猜你已经在所有 virtualenvs 之外全局安装了invoke。
如果是这样,解决方法是:
#!/usr/bin/bash
# Remove global invoke, at a fresh terminal or after deactivate
$ pip uninstall invoke
要对其进行测试,请添加到 Invoke 的 tasks.py 文件:
import sys
print(sys.version_info)
然后在终端检查我们得到 Python 3.x:
#!/usr/bin/bash
$ mkvirtualenv myproject_py3 --python=$(which python3)
(myproject_py3)$ pip install invoke
(myproject_py3)$ invoke --list
sys.version_info(major=3, minor=5, micro=0, releaselevel='final', serial=0)
No tasks found in collection 'tasks'!
【解决方案2】:
正如pzrq 提到的,问题是您已在全局范围内安装了调用。
这不是一个虚拟环境问题,而是一个 linux 问题。
这意味着当您从终端使用命令invoke 时,linux 会在它的可用路径(/bin、/sbin 或您自己的任何路径)中查找此类可执行文件。
首先找到并执行您的全局 python 2 invoke。
您的 virtualenv python3 invoke 位于可用路径列表的后面,因此从未到达。
我建议只为每个虚拟环境安装调用。