Virtualenv并不指向正确的python3

问题描述 投票:1回答:1

[使用bash脚本为项目创建了虚拟环境,bash脚本与项目位于相同的目录中:

#!/bin/bash

virtualenv=~/Library/Python/3.7/lib/python/site-packages/virtualenv.py
wd=$(dirname "$BASH_SOURCE")
env_dir=~/virtual_environments/invest_scripts
$virtualenv $env_dir

cd -- "$(dirname "$BASH_SOURCE")"
source $env_dir/bin/activate
sudo python3 setup.py develop
deactivate

运行脚本后,我使用激活环境

source ~/virtual_environments/invest_scripts/bin/activate

但是我得到以下输出

(invest_scripts) $which python
(invest_scripts) $/Users/name/virtual_environments/invest_scripts/bin/python
(invest_scripts) $which python3
(invest_scripts) $/usr/bin/python3

另外,我发现在未激活虚拟环境的情况下打开交互式python3外壳时,导入了setup.py中指定的程序包。文件指向我项目中显示的鸡蛋。

$ python3
Python 3.7.3 (default, Nov 15 2019, 04:04:52) 
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.__file__
'/Users/name/invest_scripts/.eggs/numpy-1.18.0-py3.7-macosx-10.7 x86_64.egg/numpy/__init__.py'

有人可以解释发生了什么吗?

python virtualenv setup.py
1个回答
0
投票

sudo使用新的Shell执行命令,它不会跨PATH环境变量进行复制。这不是特定于virtualenv的问题。有关一般解决方案,请参见https://unix.stackexchange.com/questions/83191/how-to-make-sudo-preserve-path

但是,您不必依赖Shell可执行文件解析。激活virtualenv本质上只是设置您的PATH变量,这样,当您使用不合格的$env_dir/bin/python可执行文件时,您的外壳程序首先会找到python。您可以只使用$env_dir/bin/python可执行文件的完整路径,因此可以完全避开可执行文件查找:

sudo $env_dir/bin/python setup.py install

但是,通常在将软件包安装到virtualenv时,尤其是root用户,要避免切换用户。应该没有任何必要。如果您在[[virtualenv]中遇到权限问题],那么您过去就曾使用过sudo,并且您不想使该问题复杂化。在这种情况下,通过将文件递归地重新分配给您自己的帐户来[:sudo chown -R $UID:`id -g` $env_dir下一步,而不是使用setup.py install,请使用pip进行安装。只需使用virtualenv中的pip命令将其指向包含setup.py文件的目录即可。如果这是当前目录,请使用:$env_dir/bin/pip .

© www.soinside.com 2019 - 2024. All rights reserved.