Python 如何制作蟒蛇3';s venv使用与我的系统相同的pip3版本';是哪一个?
我使用的是Python 如何制作蟒蛇3';s venv使用与我的系统相同的pip3版本';是哪一个?,python,python-3.x,pip,virtualenv,ubuntu-16.04,Python,Python 3.x,Pip,Virtualenv,Ubuntu 16.04,我使用的是ubuntu16.04,我总是使用python3-m vevn venv来创建Python的虚拟环境,并使用source venv/bin/active来激活它 我已确保我的全球系统环境的pip3是最新版本,例如,9.0.1,但每次我使用上述命令创建虚拟环境时,最初的venv的pip3版本总是旧版本,例如,8.1.1,这使得系统每次都提醒我升级我的pip3 我已经在我的系统环境中尝试了sudo-apt-get-install-升级python3-venv,但一切都是最新版本 如何使Py
ubuntu16.04
,我总是使用python3-m vevn venv
来创建Python的虚拟环境,并使用source venv/bin/active
来激活它
我已确保我的全球系统环境的pip3是最新版本,例如,9.0.1
,但每次我使用上述命令创建虚拟环境时,最初的venv的pip3版本总是旧版本,例如,8.1.1
,这使得系统每次都提醒我升级我的pip3
我已经在我的系统环境中尝试了sudo-apt-get-install-升级python3-venv
,但一切都是最新版本
如何使Python3的venv使用与我的系统相同版本的pip3,从而不必在每次创建虚拟环境时升级我的pip3?如何确定venv的pip3版本
谢谢。对于venv
的前身pyvenv
也有类似的说法。
以下是答案的相关部分:
EnsureIP包不会从internet下载或从其他任何地方获取文件,因为包中已包含所有必需的组件。这样做会增加安全缺陷,因此不受支持
包的更新频率不如pip
那么高
我通过使用以下命令设置热键解决了此问题:
$python3-m venv-venv&&source-venv/bin/activate&&pip3安装--升级pip
对于venv
的前身pyvenv
也有类似的情况。
以下是答案的相关部分:
EnsureIP包不会从internet下载或从其他任何地方获取文件,因为包中已包含所有必需的组件。这样做会增加安全缺陷,因此不受支持
包的更新频率不如pip
那么高
我通过使用以下命令设置热键解决了此问题:
$python3-m venv-venv&&source-venv/bin/activate&&pip3安装--升级pip
我设法在我的Windows上安装了最新版本。但此方法可能会导致安全问题。在你尝试这个之前,要知道你在做什么
我只在Windows上的Python3.5.2上测试了它。如果您使用的是Python2.x,最好不要尝试
首先,找出您的venv
使用的版本。使用:
>>> import inspect
>>> import venv
>>> print(inspect.getsource(venv))
[the source of venv goes here]
在函数\u setup\u pip
的定义中,您会发现:
def _setup_pip(self, context):
"""Installs or upgrades pip in a virtual environment"""
# We run ensurepip in isolated mode to avoid side effects from
# environment vars, the current directory and anything else
# intended for the global Python environment
cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade',
'--default-pip']
subprocess.check_output(cmd, stderr=subprocess.STDOUT)
这个函数告诉我们pip是由另一个名为ensurepip
的python包安装的。因此,我们将使用以下方法转到ensurepip
的源代码:
>>> import ensurepip
>>> print(inspect.getsource(ensurepip))
[the source of ensure pip goes here]
在源代码的前几行中,您将获得:
_SETUPTOOLS_VERSION = "20.10.1"
_PIP_VERSION = "8.1.1"
这是捆绑在一起的EnsureIP
版本信息。但是只更改这两行只会导致失败,因为您没有更改local.whl包。那么.whl包在哪里?在这里,它位于函数引导的源代码中:
def bootstrap(*, root=None, upgrade=False, user=False,
altinstall=False, default_pip=False,
verbosity=0):
...
with tempfile.TemporaryDirectory() as tmpdir:
# Put our bundled wheels into a temporary directory and construct the
# additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS: # *pay attention to these lines*
wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
whl = pkgutil.get_data(
"ensurepip",
"_bundled/{}".format(wheel_name),
)
with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
fp.write(whl)
additional_paths.append(os.path.join(tmpdir, wheel_name))
...
注意我评论的那一行。因此,这告诉我们,.whl文件位于sure/_bundled/
目录中,您也可以使用inspect.getsourcefile(ensurepip)
。我得到的是'c:\\python35\\lib\\ensurepip\\\\uuuu init\uuuu.py'
转到该目录,您将获得两个文件:pip-8.1.1-py2.py3 none any.whl
,setuptools-20.10.1-py2.py3 none any.whl
我上面写的只是为了让你们了解我们正在做什么,所以下面是你们需要做的事情:
转到/your/python/lib/dir/ensurepip/\u bundled/
用命令下载pip-wheel文件,我得到了pip-9.0.1-py2.py3-none-any.whl
:
$pip下载pip
编辑ensurepip
的源代码。在ensurepip/_init__.py
中,按如下方式编辑并保存:
# _PIP_VERSION = "8.1.1" # comment this line
_PIP_VERSION = "9.0.1" # add this line
现在你成功了。要检查pip版本,请执行以下操作:
$ python -m venv testpip
$ cd testpip
$ .\Scripts\activate.bat (in Linux, use '$ source ./bin/activate' instead.)
(testpip) $ pip --version
pip 9.0.1 from the \your\venv\testpip\lib\site-packages (python 3.5)
请注意,不要对setuptools
执行相同的操作,因为它还有一些其他依赖项,这使它变得更加复杂
Happy hacking:)我设法在我的Windows上安装了最新版本。但此方法可能会导致安全问题。在你尝试这个之前,要知道你在做什么
我只在Windows上的Python3.5.2上测试了它。如果您使用的是Python2.x,最好不要尝试
首先,找出您的venv
使用的版本。使用:
>>> import inspect
>>> import venv
>>> print(inspect.getsource(venv))
[the source of venv goes here]
在函数\u setup\u pip
的定义中,您会发现:
def _setup_pip(self, context):
"""Installs or upgrades pip in a virtual environment"""
# We run ensurepip in isolated mode to avoid side effects from
# environment vars, the current directory and anything else
# intended for the global Python environment
cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade',
'--default-pip']
subprocess.check_output(cmd, stderr=subprocess.STDOUT)
这个函数告诉我们pip是由另一个名为ensurepip
的python包安装的。因此,我们将使用以下方法转到ensurepip
的源代码:
>>> import ensurepip
>>> print(inspect.getsource(ensurepip))
[the source of ensure pip goes here]
在源代码的前几行中,您将获得:
_SETUPTOOLS_VERSION = "20.10.1"
_PIP_VERSION = "8.1.1"
这是捆绑在一起的EnsureIP
版本信息。但是只更改这两行只会导致失败,因为您没有更改local.whl包。那么.whl包在哪里?在这里,它位于函数引导的源代码中:
def bootstrap(*, root=None, upgrade=False, user=False,
altinstall=False, default_pip=False,
verbosity=0):
...
with tempfile.TemporaryDirectory() as tmpdir:
# Put our bundled wheels into a temporary directory and construct the
# additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS: # *pay attention to these lines*
wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
whl = pkgutil.get_data(
"ensurepip",
"_bundled/{}".format(wheel_name),
)
with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
fp.write(whl)
additional_paths.append(os.path.join(tmpdir, wheel_name))
...
注意我评论的那一行。因此,这告诉我们,.whl文件位于sure/_bundled/
目录中,您也可以使用inspect.getsourcefile(ensurepip)
。我得到的是'c:\\python35\\lib\\ensurepip\\\\uuuu init\uuuu.py'
转到该目录,您将获得两个文件:pip-8.1.1-py2.py3 none any.whl
,setuptools-20.10.1-py2.py3 none any.whl
我上面写的只是为了让你们了解我们正在做什么,所以下面是你们需要做的事情:
转到/your/python/lib/dir/ensurepip/\u bundled/
用命令下载pip-wheel文件,我得到了pip-9.0.1-py2.py3-none-any.whl
:
$pip下载