这不会导致我无法通过激活虚拟环境和运行来解决任何问题pip install -U pip,但我总是想知道旧版本的pip来自哪里.
我正在使用OS X 10.7.5.当我使用pyvenv-3.4 myenv或创建虚拟环境时python3 -m venv myenv,安装在虚拟环境中的pip版本是6.0.8,但我已将全局pip升级到6.1.1.
这是一个终端会议,展示了我的意思:
$ python3 -m venv myenv
$ myenv/bin/pip -V
pip 6.0.8 from /Users/dust/Desktop/myenv/lib/python3.4/site-packages (python 3.4)
Run Code Online (Sandbox Code Playgroud)
这是我想要发生的事情:
$ source myenv/bin/activate
(myenv)$ pip -V
UPDATED SYSTEM VERSION HERE WOULD BE NICE
Run Code Online (Sandbox Code Playgroud)
除了在虚拟环境中创建的内容之外,我无法在其他任何地方找到pip 6.0.8.
以下是我用来尝试解决这些问题的各种命令的输出:
$ which pip
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip
$ which pip3
/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3
$ pip -V
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4)
$ pip3 -V
pip 6.1.1 from /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages (python 3.4)
Run Code Online (Sandbox Code Playgroud)
我甚至尝试使用find:
$ find / -type …Run Code Online (Sandbox Code Playgroud) 文章阅读:
假设我们有这些目录:
~/Projects/PyA : it'll use Python 3.4.3 with Django 2.0
~/Projects/PyB : it'll use Python 3.5.1 with Django 2.1
~/Projects/PyC : it'll use Python 3.5.6 with Django 2.2
~/Projects/PyD : it'll use Python 3.2 with python-igraph
Run Code Online (Sandbox Code Playgroud)
首先,我们安装所需的 Python 版本:
$ pyenv install 3.4.3
$ pyenv install 3.5.1
$ pyenv install 3.5.6
$ pyenv install 3.2
Run Code Online (Sandbox Code Playgroud)
我的疑惑从这里开始:
我应该这样做吗?
$ cd ~/Projects/PyA && pyenv local 3.4.3 && python3.4 -m venv …Run Code Online (Sandbox Code Playgroud) 我创建了一个虚拟环境;假设 test_venv,我激活它。一切成功。
然而,Python 解释器的路径不会改变。我已经在下面说明了这种情况。
为了澄清起见,python 路径应该是~/Desktop/test_venv/bin/python.
>>> python3 -m venv Desktop/test_venv
>>> source Desktop/test_venv/bin/activate
(test_venv) >>> which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud) 我正在使用 WSL2 Ubuntu。我一直在学习使用 Fastapi 进行后端 API 开发的课程。我相信我的 Ubuntu 默认 python 是 3.8。我正在尝试使用 python 3.10.0 进行开发。我做了以下事情:
\n我的问题是,当我查看 .venv/bin 文件时,所有符号链接都显示 python 3.8。
\ndrwxr-xr-x 2 mryan mryan 4096 Feb 1 23:12 .\ndrwxr-xr-x 4 mryan mryan 4096 Feb 1 23:12 ..\n-rw-r--r-- 1 mryan mryan 2152 Feb 1 23:12 activate\n-rw-r--r-- 1 mryan mryan 1444 Feb …Run Code Online (Sandbox Code Playgroud) 在Windows 8上,我有一个Python 3项目的以下结构:
../Project/
../Project/app/app.py
../Project/app/setup.py
Run Code Online (Sandbox Code Playgroud)
从app文件夹中,我调用以下命令来创建并进入虚拟环境:
pyvenv.py venv
cd venv\Scripts
activate.bat
cd ../..
Run Code Online (Sandbox Code Playgroud)
现在我想将Nose单元测试框架安装到我的虚拟环境中:
pip install nose
Run Code Online (Sandbox Code Playgroud)
...并且Nose被安装到全局文件夹中(在我的例子中,C:\ Python33).
当我调用时python setup.py install,我的自定义模块安装到虚拟环境中.为什么PIP不这样做呢?
如何使用Ans3使用venvPython3标准库中的模块创建virtualenv ?
手动,人们会这样做来创建一个venv:
python3 -m venv <venv-name>
Run Code Online (Sandbox Code Playgroud)
我如何使用Ansible执行此操作?
如何删除使用创建的虚拟环境
python3 -m venv <name>
Run Code Online (Sandbox Code Playgroud)
我可以删除目录吗?
这似乎是谷歌搜索应该轻松回答的问题,但我只找到了删除用virtualenv或创建的环境的答案pyvenv.
出于持续集成的目的,我使用以下内置 py3.6 venv 命令(不要与 virtualenv 混淆)(请参阅pep 405)。
python -m venv --system-site-packages --without-pip <ENVNAME>
Run Code Online (Sandbox Code Playgroud)
我发现它工作得很好,我立即获得了一个环境。
但是,.... venv 会生成一个 pyvenv.cfg 文件,如下所示:
home = absolute/path/to/prefix/of/interpreter/which/ran/venv
include-system-site-packages = true
version = <interpreter python version>
Run Code Online (Sandbox Code Playgroud)
这个文件包含非常重要的home键,它指的是创建这个venv的原始基础python。非常重要的是,无效的主页键会导致在基本解释器中找不到其库的 python 进程崩溃。
现在我想将这个“经过测试的绿色”venv + 其基础 python 部署到生产机器上。我不想在生产系统上重建它,而只是将它复制到那里。
不用说,在 CI 工具上创建的主页绝对路径在生产机器上无效,所以我需要编辑 pyvenv.cfg 文件主页键,一切都像魅力一样工作。
这种文件操作是我真正想避免的步骤,因为我想生成一个只需要复制、激活和调用(标准方式)的工件。
我试图将 %xyz%、$xyz 甚至 configParser %(xyz)s 放在原始文件上,但这些都没有解决。我还尝试在那里使用相对路径,但该路径是相对于工作目录的,我不想强制生产系统从固定工作目录调用我的工件。
除了丑陋的 pyvenv.cfg 操作之外,还有其他解决方案吗?
我使用以下方法创建了我的 python 虚拟环境:
python3 -m venv venv3
Run Code Online (Sandbox Code Playgroud)
激活,我source venv3/bin/activate。
venv3/bin/activate 似乎没有那么复杂:
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be …Run Code Online (Sandbox Code Playgroud) 我的磁盘上有几个虚拟环境(几十个),由venvPython 3.6 模块制作。现在我匆忙升级到 Ubuntu 19.10,后来才注意到 Ubuntu 19.10 根本不可用 3.6 从公认的来源。通过定位在我的主目录下并在包含的文件夹上运行,我设法升级了这些虚拟环境的Python 版本。bin/python3python3.7 -mvenv --upgrade
现在,虽然python3.7 -mvenv --upgrade在虚拟环境中升级 Python,但lib/python3.7/site-packages在venv. 我想我可以通过安装Python 3.6,已经这样做了pip freeze荷兰国际集团从需求venv,然后VENV升级到Python 3.7,pip install -r荷兰国际集团-只要有Python的3.6安装可用于我的新的操作系统。
有没有其他方法可以以相当自动化的方式(也许主要是pip freeze使用旧lib/python3.6目录)来做到这一点,而我不必从源代码安装 Python 3.6、使用 conda 或从一些随机 PPA 安装 3.6?我想整体升级所有环境,以便将来当我需要对随机环境执行某些操作时,它将继续使用 Python 3.7。
python-venv ×10
python ×8
python-3.x ×6
pip ×2
pyenv ×2
ansible ×1
bash ×1
python-3.4 ×1
ubuntu ×1
virtualenv ×1