Python 我如何确保conda';s环境特定路径位于sys.path的顶部?

Python 我如何确保conda';s环境特定路径位于sys.path的顶部?,python,anaconda,python-3.8,virtual-environment,anaconda3,Python,Anaconda,Python 3.8,Virtual Environment,Anaconda3,我有一个康达环境,myenv。我意识到这个环境中的Python解释器试图在/usr/local/anaconda3/envs/myenv/lib/python3.8/site包之前从/site包导入包。我希望所有特定于环境的路径都附加到sys.path的开头。这是预期的行为吗?在本例中,我想导入conda安装的numpy、scipy和numexpr版本,因为它们使用“英特尔MKL”后端 (myenv) me$ which python /usr/local/anaconda3/envs/myen

我有一个康达环境,
myenv
。我意识到这个环境中的Python解释器试图在
/usr/local/anaconda3/envs/myenv/lib/python3.8/site包之前从
/site包导入包。我希望所有特定于环境的路径都附加到
sys.path
的开头。这是预期的行为吗?在本例中,我想导入conda安装的numpy、scipy和numexpr版本,因为它们使用“英特尔MKL”后端

(myenv) me$ which python
/usr/local/anaconda3/envs/myenv/bin/python
(myenv) me$ python
Python 3.8.5 (default, Sep  4 2020, 02:22:02) 
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__file__
>>> '/Users/me/.local/lib/python3.8/site-packages/numpy/__init__.py'
>>> import sys
>>> # /Users/me/dir* refer to directories that contain local modules I've pip installed
>>> print("\n".join(sys.path))

/usr/local/anaconda3/envs/myenv/lib/python38.zip
/usr/local/anaconda3/envs/myenv/lib/python3.8
/usr/local/anaconda3/envs/myenv/lib/python3.8/lib-dynload
/Users/me/.local/lib/python3.8/site-packages
/Users/me/dir1
/Users/me/dir2
/Users/me/dir3
/usr/local/anaconda3/envs/myenv/lib/python3.8/site-packages
其他可能相关的事项:

  • 我同时使用conda和pyenv,以便将conda的
    auto\u activate\u base
    设置设置为false(如这里所建议的)
  • Python解释器声明其版本为3.8.5,但
    conda info
    Python版本列为3.8.3.final.0

我正在MacOS版本11.2.2上使用conda版本4.9.2。

多亏@merv的评论,我意识到问题在于pip的用户站点优先于conda环境的包目录。我按照@merv的建议解决了这个问题:卸载pip用户站点中的所有软件包

me$ pyenv shell 3.8.1
me$ pip freeze --user | grep -Eo "[[:alnum:]\-]+==[[:digit:]]{1,2}\.[[:digit:]]{1,2}(\.[[:digit:]]{1,2})?" | xargs pip uninstall -y
me$ conda activate myenv
(myenv) me$ python
Python 3.8.5 (default, Sep  4 2020, 02:22:02) 
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__file__
/usr/local/anaconda3/envs/myenv/lib/python3.8/site-packages/numpy/__init__.py

如果能看到路径上有什么,以及是否设置了PYTHONPATH,或者可能是
which-a-python
输出,那就太好了。Conda对安装了
pip install--user
的软件包真的不太好,我认为
~/.local/lib/..
软件包就是这样安装的--可能需要卸载这些软件包。另外,
.bash\u profile
是否设置了默认的
conda init
?非常感谢您指出了在conda环境中使用
pip安装--user
的问题!这帮助我解决了这个问题(见下面的答案)。如果其他人看到他们是否有相同的问题是有帮助的,
哪个python
输出
/usr/local/anaconda3/envs/myenv/bin/python
,是的,
.bash\u profile
设置了默认的
conda init
。作为参考,它警告不要使用
--user
标志,从一个核心开发者讨论这些建议的一些背景。