Virtualenv没有指向正确的Python 3

Virtualenv没有指向正确的Python 3,python,virtualenv,setup.py,Python,Virtualenv,Setup.py,使用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_

使用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
shell,并导入在
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'

有人能解释一下发生了什么吗?

sudo
使用新的shell执行命令,它不会跨
路径
环境变量进行复制。这不是特定于
virtualenv
s的问题。有关此问题的一般解决方案,请参阅

但是,您不需要依赖shell可执行文件解析。激活virtualenv本质上只是设置
路径
变量,以便shell在使用非限定的
python
可执行文件时首先找到
$env\u dir/bin/python
。您只需使用
$env_dir/bin/python
可执行文件的完整路径,就可以完全避开可执行文件查找:

sudo$env_dir/bin/python setup.py安装
但是,在将软件包安装到virtualenv(尤其是root)中时,您通常希望避免切换用户。应该没有必要这样做。如果您的virtualenv中存在权限问题,那么您过去就使用了
sudo
,您不想让这个问题变得复杂。在这种情况下,通过递归地将文件重新分配给您自己的帐户来修复您的virtualenv权限:
sudo chown-R$UID:`id-g`$env_dir

接下来,不要使用
setup.py安装
,而是使用
pip
进行安装。只需在virtualenv中使用
pip
命令,将其指向包含
setup.py
文件的目录。如果这是当前目录,请使用:

$env_dir/bin/pip。

首先为什么要使用
sudo
运行
setup.py develope
?这很少是个好主意。这实际上是@MartijnPieters的副本,因为我在对哪个文件夹运行该命令时没有对该文件夹的写入权限?在虚拟世界里?您以前是否运行了连接到该virtualenv的
sudo
命令?只要
sudo chown-R yourrusername virtualenv
就可以解决这个问题。不要使情况复杂化!这表明您没有使用virtualenv Python安装软件包。使用virtualenv python
setup.py安装时
不应写入
/Library/python/3.7/site-packages/