python - 可以在没有**任何**默认环境的情况下安装 Anaconda 吗?

标签 python pip anaconda homebrew package-managers

背景

我想避免“意外地”在默认环境中工作。

我想一直有一个等价于 requirements.txt 的东西或 package.json文件可用,既可以清楚地将一个项目与另一个项目分开,也可以方便地回头看看安装了什么(以及它的版本)。


但我主要从事数据科学/分析领域的工作,主要使用 Python。

因此,我使用 Anaconda , pip , 和 Homebrew (我有一台 Mac)。 只依赖一个包管理器会很棒,而且很多人都支持 one methodanother来完成这个。事实是,截至目前(2018 年 9 月),不可能在处理任何广泛的主题时至少避免一些混合。


我的眼光放得更远,更现实,我只是想确保尽可能没有默认环境,让与他人一起处理项目更干净、更轻松。

据我所知,Homebrew 中根本没有环境的概念。 Conda 当然有环境,但它首先会设置一个默认环境,然后才能创建任何其他环境。

问题

有什么方法可以安装 Anaconda 没有任何默认环境,这样我就必须一直 source activate <my_env> ?如果是这样,我该怎么做?

除此之外,实现我想要的目标的最佳建议是什么?永远不要不小心在不清楚我的依赖项的环境中工作,认识到我主要是在说话,但不只是关于使用 Python?

(请不要建议我在安装软件包时应该“小心”。是的,我明白这一 pip 。但我试图先发制人地小心,让错误的选择变得尽可能困难或不可能。例如,如果我没有默认环境,那么 pip 甚至在我找到一个环境之前都不会工作,因为它不会在我的正常环境中找到。)

最佳答案

我认为最好的选择是简单地使用虚拟环境并在必要时安装依赖项,然后随着工作的进行 checkin 和 checkout 虚拟环境。您可以在处理不同的项目时创建不同的虚拟环境,并将其相应的 requirements.txt 文件留在 python 在安装虚拟环境时创建的目录中。假设我有 python3.5.2 作为我的常规 go-to python 包(因为我有)。

使用 python3.5 让我们进入一个虚拟环境,只有 python3.5 的骨架(没有安装依赖项)。为此:

[dkennetz@node venv_test]$ python -m venv my_SO_project
[dkennetz@node venv_test]$ ls
my_SO_project

所以我们看到,python 已经创建了一个目录来存放我的虚拟环境,但是我的虚拟环境并没有被用作我的默认 python。为此,我们必须激活它:

[dkennetz@node venv_test]$ source ./my_SO_project/bin/activate

所以我的 shell 现在看起来像这样:

(my_SO_project) [dkennetz@nodecn201  venv_test]$

既然我们在这里,让我们看看我们的需求是什么样的:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ ls -alh
drwxr-x---  3 dkennetz blank 4.0K Oct  9 09:52 .
drwxr-x--- 93 dkennetz root      16K Oct  9 09:40 ..
drwxr-x---  5 dkennetz blank 4.0K Oct  9 09:47 my_SO_project
-rwxr-x---  1 dkennetz blank    0 Oct  9 09:47 requirements.txt

使用空白来隐藏组名,但正如我们所见,我们的 requirements.txt 文件大小为空,这意味着这个虚拟环境没有依赖项。它是纯粹的python3.5。现在让我们继续安装 pandas,看看我们的依赖项如何变化。

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip install pandas
(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ more requirements.txt
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
six==1.11.0
(my_SO_project) [dkennetz@nodecn201  venv_test]$ wc -l requirements.txt
5 requirements.txt

假设我们已经在环境中编写了一些代码,我们不想再做任何工作,所以我们做最后一个 pip freeze > requirements.txt 然后我们离开:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ deactivate
[dkennetz@nodecn201  venv_test]$ pip freeze > requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ wc -l requirements_normal.txt
82 requirements_normal.txt

弹出了更多的依赖关系,但在我们的正常环境中没有任何变化,在我们的虚拟环境中也没有任何变化。现在假设我们已经休息了一天,希望回到我们昨天创建的 SO_project。这很简单:

[dkennetz@nodecn201  venv_test]$ ls -alh
drwxr-x---  3 dkennetz blank 4.0K Oct  9 10:01 .
drwxr-x--- 93 dkennetz root      16K Oct  9 09:40 ..
drwxr-x---  5 dkennetz blank 4.0K Oct  9 09:47 my_SO_project
-rwxr-x---  1 dkennetz blank   77 Oct  9 09:56 requirements.txt
-rwxr-x---  1 dkennetz blank 1.3K Oct  9 10:01 requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ source ./my_SO_project/bin/activate
(my_SO_project) [dkennetz@nodecn201  venv_test]$ 

让我们看看我们离开的地方,(我们应该只安装 pandas,让我们覆盖旧的 requirements_file):

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ more requirements.txt
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
six==1.11.0

太棒了,现在我们知道我们就在我们离开的地方。只是一个公平的警告,我在我的根 python 包上安装了 pandas,但我没有的是 awscli(亚马逊网络服务命令行界面)。假设我出于某种原因想要在我的包裹中:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip install awscli
(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ wc -l requirements.txt
15 requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ deactivate
[dkennetz@nodecn201  venv_test]$ ls
my_SO_project  requirements.txt  requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ pip freeze > requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ wc -l requirements_normal.txt
82 requirements_normal.txt

所以我们现在看到安装 awscli 并没有改变我们的 python 包,但它改变了我们的 venv:

[dkennetz@nodecn201  venv_test]$ more requirements_normal.txt
appdirs==1.4.3
arrow==0.7.0
attrdict==2.0.0
avro-cwl==1.8.4
...
[dkennetz@nodecn201  venv_test]$ more requirements.txt
awscli==1.16.29
botocore==1.12.19
colorama==0.3.9
docutils==0.14
...

最后,假设您已经开发了一个完全在您的 VM 内部的超酷数据科学包,并且您已经使其可以通过 pip 安装。快速简便的方法是:

[dkennetz@nodecn201  venv_test]$ pip install -r requirements.txt

你现在可以在每次你的“新程序”被 pip 安装时使用它作为你的包列表,更好的是你知道你需要的每个 python 包,因为这些是你唯一包含在你的环境中的包。

综上所述,没有理由在每次与新人开始新项目时都这样做。如果你想在你使用过的每个虚拟环境中都有 anaconda,请正常安装 anaconda:

[dkennetz@nodecn201  venv_test]$ ./Anaconda-1.6.0-Linux-x86_64.sh
[dkennetz@nodecn201  venv_test]$ source /home/dkennetz/anaconda3/bin/activate
#You will be in your anaconda environment now
(base) [dkennetz@nodecn201  venv_test]$ pip freeze > anaconda_reqs.txt

假设您在第一个项目之后现在启动了 my_SO_project2,并且您想要确保此包中包含 anaconda。以与上次相同的方式创建新的 venv。一旦进入,只需安装 anaconda 所需的所有依赖项,您将拥有一个全新的 anaconda 虚拟环境:

(my_SO_project2) [dkennetz@nodecn201  venv_test]$ pip install -r anaconda_reqs.txt

你的新 venv 作为一个全新的环境启动,只安装了 anaconda。

我希望这能澄清我在评论中所说的内容,对您有所帮助。

关于python - 可以在没有**任何**默认环境的情况下安装 Anaconda 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485828/

相关文章:

python - 将 csv 导入 python 的确切文件夹

python - 使用 conda 导入 pytorch 时出现问题

python - pip 从特定的 setup.py 安装

Java:未使用更新的类文件

python - 我尝试使用我安装的 python 包,但出现此错误

python - pip 错误 : Fatal error in launcher: Unable to create process using '"'

python - 如何将文件夹添加到给定 Anaconda 环境的搜索路径?

python - 列表索引超出范围...:(

python - 更改图表边框区域颜色

python - pip 无法安装任何东西