实用工具---python运行环境部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingqing7/article/details/79092003

主要解决的问题:
1、服务器上的python版本较老,直接升级或安装一些库不知道会不会对其他人员的开发和应用产生影响,因而需要一些独立的python运行环境,如何创建这样的环境?
2、像编写spark应用时,如果需要载入一些库或自己编写的类,这个时候就需要将相关库和文件与应用程序一起打包,如何打包?

1、conda工具介绍

1.1、关于Conda容易混淆的地方

来源文章

神话#1:Conda是一个发行版,不是一个软件包管理器
现实:Conda是一个包管理器;Anaconda是一个发行包。虽然Conda与Anaconda一起包装,但两者是具有不同目标的不同实体。

软件发布包是预先构建和预配置的包的集合,其可以在系统上安装和使用。包管理器是自动化安装,更新和删除包的过程的工具。 Conda,其“conda install”,“conda update”和“conda remove”子命令,完全属于第二个定义:它是一个包管理器。
也许这里的混乱来自于Conda紧密耦合到两个软件分发:Anaconda和Miniconda的事实。 Anaconda软件在PyData生态系统中的完整分布,包括Python本身以及几百个第三方开源项目的二进制文件。 Miniconda本质上是一个conda环境的安装程序,只包含Conda及其依赖项,以便您可以从头开始安装所需的。
但不要弄错误:Conda与Anaconda / Miniconda不同,Python本身(如果你愿意)可以自行安装。

神话#2:Conda是一个Python包管理器
现实:Conda是一种通用包管理系统,旨在构建和管理任何语言的任何类型的软件。因此,它也适用于Python包。

因为conda来自于Python(更具体地说是PyData)社区,许多人错误地认为它基本上是一个Python包管理器。情况并非如此:conda旨在管理任何软件堆栈中的包和依赖关系。在这个意义上,它不像pip,更像是apt或yum等跨平台版本。
如果你使用conda,你已经可以利用许多非Python包;以下命令将列出您环境中的那些:

$ conda search –canonical | grep -v ‘py\d\d’

在我的系统上,有350个结果:这些是我的Conda / Python环境中的包,这些包基本上是由Python-only工具(如pip和virtualenv)无法管理的。

神话#3:Conda和pip是直接竞争对手
现实:Conda和pip服务于不同的目的,并且只在一小部分任务中直接竞争:即在孤立的环境中安装Python包。

Pip代表Pip Installs Packages,是Python的官方认可的包管理器,最常用于安装在Python包索引(PyPI)上发布的包。 pip和PyPI都由Python包装管理局(PyPA)管理和支持。
简而言之,pip是Python包的通用管理器; conda是一个与语言无关的跨平台环境管理器。对于用户,最显着的区别可能是这样的:pip在任何环境中安装python包; conda安装在conda环境中的任何包装。如果你正在做的是在孤立的环境中安装Python包,conda和pip + virtualenv大多是可互换的,模数依赖处理和包可用性的一些差异。通过隔离环境(conda-env或virtualenv),您可以在其中安装软件包,而无需修改您的系统Python安装。
即使放弃神话#2,如果我们专注于只是安装Python包,conda和pip服务不同的受众和不同的目的。 如果你想在现有的系统Python安装中管理Python包,conda不能帮助你:通过设计,它只能在conda环境中安装包。 如果你想说,使用依赖于外部依赖的许多Python包(NumPy,SciPy和Matplotlib是常见的例子),同时以一种有意义的方式跟踪这些依赖,pip不能帮助你:它 管理Python包和只有Python包。
Conda和pip不是竞争对手,而是侧重于不同用户组和使用模式的工具。

神话#4:在第一个地方创造conda是不负责任和分裂
现实:Conda的创作者将Python的标准包装推向了极限十多年,并且只有在明确了它是唯一合理的前进道路时才创造了第二个工具。

根据Python的哲学,在Python做任何事情“应该有一个,最好只有一个明显的方式来做”。那么为什么conda的创建者会通过引入一种新的方式来安装Python包呢?为什么他们没有贡献回Python社区并改进pip来克服它的缺陷?

事实证明,这正是他们所做的。在2012年之前,PyData / SciPy生态系统的开发人员很大程度上在Python社区开发的包管理解决方案的约束下工作。早在2001年,NumPy项目就试图使它处理NumPy分布的复杂要求。他们将大部分的NETLIB绑定到一个单一的Python包(你可能知道这是SciPy),实际上创建一个分发为python包,以规避Python的分发工具不能用任何有意义的方式管理这些额外的Python依赖。为了阅读一些关于这些痛点的细节以及如何导致Conda,我建议Travis Oliphant的2013年博客文章。

但是为什么Conda的创作者不和Python包装人员谈谈,一起找出这些挑战呢?事实证明,他们谈了。

Conda的创始来自Guido van Rossum先生在2012年首届PyData聚会上发表演讲;在一个关于包装困难的问题上,他告诉我们,当谈到包装,“真的听起来像你的需求是相当大的Python社区,你只是更好地建立自己的”的讨论)。即使在遵循这个来自BDFL的建议的情况下,PyData社区继续与核心Python开发人员的对话和协作的主题:另一个公开的例子是CPython核心开发人员Nick Coghlan邀请在SciPy 2014主题演讲(见视频here )。他做了一个很好的演讲,在软件分发的“未解决问题”的背景下具体讨论了pip和conda,并提到了具有适合特定用户需求的多种分发方式的价值。
Conda不是分裂的,Nick和其他人在Python包装管理局正式认可conda作为Python代码的许多重要的重新分发器之一,并且正在努力更好地使这些工具与Python包索引无缝地工作。

神话#5:conda不能使用virtualenv,所以它对我的工作流没有用
现实:你实际上可以在一个virtualenv中安装(一些)conda包,但更好的是使用Conda自己的环境管理器:它与pip完全兼容,并且比virtualenv有几个优点。

virtualenv / venv是允许用户创建与pip一起使用的隔离的Python环境的实用程序。 Conda有自己的内置环境管理器,可以与conda和pip无缝工作,并且事实上比virtualenv / venv有几个优点:
conda环境集成了不同Python版本的管理,包括Python本身的安装和更新。 Virtualenvs必须在现有的,外部管理的Python可执行文件上创建。
conda环境可以跟踪非python依赖;例如无缝管理依赖性和基本工具(如LAPACK或OpenSSL)的并行版本
而不是构建在符号链接上的环境 - 这破坏了virtualenv的隔离,并且对于非Python依赖关系有时可能是脆弱的 - conda-envs是单个可执行路径中的真正隔离环境。
虽然virtualenvs与conda软件包不兼容,但conda环境与pip软件包完全兼容。第一个conda安装pip,然后你可以pip安装任何可用的包在那个环境中。您甚至可以在conda环境文件中显式地列出pip包,这意味着完整的软件堆栈可以从单个环境元数据文件完全重现。
也就是说,如果你想在你的virtualenv中使用conda,它是可能的:

$ virtualenv test_conda
$ source test conda/bin/activate
$ pip install conda
$ conda install numpy

这将在您的virtualenv中安装conda的MKL启用的NumPy包。 我不会推荐这个:我找不到这个功能的文档,并且结果似乎相当脆弱 - 例如,试图conda更新python内的virtualenv失败在一个非常不起眼和不可恢复的方式,看起来与 符合连接virtualenv的架构。 这似乎不是conda和virtualenv之间的一些根本不兼容,而是与构建过程中的一些细微不一致有关,因此是潜在可固定的(例如,参见conda Issue 1367和anaconda Issue 498)。
如果你想避免这些困难,一个更好的想法是pip安装conda,然后创建一个新的conda环境中安装conda包。 对于习惯于使用pip / virtualenv / venv命令语法的人来说,conda文档包括conda和pip / virtualenv命令之间的转换表。

神话#6:现在pip使用wheels,conda不再需要
现实:wheels只是提出conda发展的许多挑战之一,而wheels有弱点,Conda的二进制文件解决。

驱动Conda创建的一个困难是,pip可以只分发源代码,而不是预编译的二进制分发,这对于构建诸如NumPy和SciPy的扩展重模块的用户来说尤其具有挑战性。 Conda以自己的方式解决了这个问题后,pip本身增加了对轮子的支持,这是一个二进制格式,旨在解决pip中的这个难题。有了这个问题在共同的工具,解决Conda早期采纳者现在应该回到pip?
不必要。跨平台二进制文件的分发只是conda中解决的许多问题之一。编译的二进制文件聚焦了conda的另一个重要部分:有意义地跟踪非Python依赖关系的能力。因为pip的依赖关系跟踪只限于Python包,所以在轮子中这样做的主要方法是将发布的依赖包版本与Python包二进制包捆绑在一起,这使得更新这样的依赖很痛苦(最近OpenSSL的安全更新)。此外,conda包括一个真正的依赖解析器,一个pip目前缺乏的组件。
对于科学用户,conda还允许将构建链接到优化的线性代数库,Continuum使用其自由提供的MKL启用的NumPy / SciPy。 Conda甚至可以分发非Python构建需求,例如gcc,这大大简化了在其分发的预编译二进制代码上构建其他包的过程。如果你试图使用pip的轮子,你最好希望你的系统有编译器和设置兼容那些用来最初构建的问题的车轮。

神话#7:conda不开源;它被绑定到一个营利公司,可以开始收取服务,只要他们想要
现实:conda(包管理器和构建系统)是100%开源,Anaconda(发行版)也几乎在那里。

在开放源代码世界中,有一些对营利性实体的根本不信任,而Anaconda是由Continuum Analytics创建的,而且是大型企业产品的一个免费组件,这使得一些人担心。
让我们抛开一个事实,Continuum是,在我看来,是少数几家公司真正做开放软件正确的方式(一个话题另一个时间)。忽略这一点,事实是,Conda本身 - 包管理器,提供以跨平台方式构建,分发,安装,更新和管理软件的实用程序 - 是100%开源,可在GitHub和BSD许可。即使对于Anaconda(发行版),EULA只是一个标准的BSD许可证,用于创建Anaconda的工具链也是100%开源。总之,当使用Conda时,没有必要担心知识产权问题。
如果Anaconda / Miniconda发行版仍然担心,放心:你不需要安装Anaconda或Miniconda来获得conda,虽然这些是方便的使用途径。正如我们上面所看到的,你可以“pip install conda”通过PyPI安装它,而无需Continuum的网站。

神话#8:但Conda包本身是封闭的,对不对?
现实:虽然conda的默认渠道尚未完全开放,有一个由社区主导的努力(Conda-Forge)使conda包装和分销完全开放。

从历史上看,默认conda通道的软件包构建过程没有尽可能开放,并且获取构建更新的过程主要依赖于在Continuum上知道某人。谣言是,这主要是因为原始的conda包创建过程没有像今天一样明确和精简。
但这正在改变。 Continuum正在努力打开他们的包装食谱,并且我被告知,500多个包装中只有几十个仍然需要移植。这些少数食谱是Anaconda分布中唯一不完全开放的剩余部分。
如果这还不够,那么在2016年初推出的一个新的以社区为主导的项目,而不是Continuum附属项目,名为conda-forge,包含用于为任何软件包创建社区驱动的构建的工具。软件包通过github保持开放状态,二进制文件使用免费CI工具自动构建,如TravisCI for Mac OSX构建,AppVeyor for Windows构建和CircleCI for Linux构建。每个包的所有元数据都位于Github存储库中,并且通过合并Github pull请求(这是conda-forge中包更新的示例)完成包更新。
Conda-forge完全是社区为基础的,由社区主导,虽然conda-forge可能还不够成熟,无法完全替代默认的conda渠道,Continuum的创始人已经公开表示,这是他们会支持的方向。你可以在Wes McKinney的最近的博客文章,conda-forge和PyData的CentOS时期更多地了解conda-forge的承诺。

神话#9:好的,但如果Continuum Analytics不折腾了,conda不会再工作了吗?
现实:没有,Conda本质上,Continuum Analytics公司通过提供免费托管构建工件为社区服务。所有软件分发都需要由某人,甚至PyPI托管。

的确,即使是conda-forge也将其软件包发布到http://anaconda.org/,这是一个由Continuum Analytics拥有和维护的网站。但在Conda没有什么需要这个网站。事实上,conda中的自定义渠道的创建是有详细记录的,没有什么可阻止某人建立和托管自己的私人分布使用Conda作为包管理器(conda索引是相关的命令)。考虑到conda食谱的开放性和构建系统conda-forge,如果你有理由这样做不会很难反映你自己的服务器上的所有conda-forge。
如果你仍然担心Continuum Analytics - 一个营利公司 - 通过托管conda包为社区服务,你应该也同样担心Rackspace - 一个盈利的公司 - 通过托管Python包索引服务社区。在这两种情况下,一个营利性公司都是社区包裹管理系统目前表现形式的一部分。但在任何情况下,该公司的灭亡都会威胁到构建和分发系统的底层架构,这是完全自由和开源的。如果Rackspace或Continuum消失,社区只需为其依赖的开放式分配找到另一个主机和/或财务赞助者。

神话#10:每个人都应该放弃(conda | pip)和使用(pip | conda)!
现实:pip和conda服务于不同的需求,我们应该更少关注他们如何竞争,更多地关注他们如何一起工作。

正如在神话#2中提到的,Conda和pip是不同的项目,不同的目标读者:pip在任何环境中安装python包; conda安装在conda环境中的任何包装。考虑到在Python的禅意中提出的崇高理想,人们可能希望pip和conda可以以某种方式组合,所以将有一个而且只有一个明显的方式安装包。
但这永远不会发生。这两个项目的目标太不同了。除非pip项目被广泛地重新定义,否则它永远不能有意义地安装和跟踪conda所做的所有非Python包:该架构是Python特定的(正确)以Python为重点。 Pip与PyPI一起旨在成为一个灵活的出版物和分发平台以及Python软件包的管理器,并且它的表现非常出色。
同样,除非conda包被广泛重新定义,它将永远不会取代pip / PyPI作为Python代码的一般发布和分发平台。在其核心,conda关注在多个平台上健壮地运行复杂的多语言软件栈所需的详细依赖关系跟踪类型。 conda的存储库中的每个安装工件都绑定到一个确切的依赖链:通过设计,它不会允许你替换Jython for Python给定的包。你当然可以使用conda来构建一个Jython软件栈,但是每个包都需要一个新的特定于Jython的安装工件 - 这就是为了保持conda用户所依赖的严格依赖链所需要的。 Pip在这里更灵活,但一旦成本是它无法精确定义和解决依赖关系conda。
最后,对pip和conda的关注完全错过了大量的Python代码的目的设计的重新分配器。从平台特定的软件包管理器,如apt,yum,macports和homebrew到像bento,buildout,hashdist和spack这样的跨平台工具,有很多特定的包装解决方案,旨在安装Python(和其他)特定用户。对于我们来说,像Python包装管理局那样,不是作为pip / PyPI的竞争对手,而是作为下游工具,可以利用所有开发和维护pip,PyPI的所有人的英勇努力,这将是更有成果的,和相关工具链。

2、conda下载和安装

2.1、conda下载

conda官方网址,该网址上较详细的安装使用过程。
可以下载最小版如Miniconda2-latest-Windows-x86_64.exe,直接安装即可,安装完后,Miniconda2内部就集成了conda,然后就可以按照后面的方法来使用conda了。
conda的官方下载地址

还可以从清华大学镜像下载。地址是 https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
这里下载Miniconda。地址https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
下载对应版本安装。
清华大学开源软件镜像站首页:https://mirrors.tuna.tsinghua.edu.cn/
linux下安装miniconda
1、至开源站点(如清华)下载对应的软件包,linux系统为.sh文件
2、安装miniconda
bash Anaconda3-4.3.1-Linux-x86.sh

Miniconda will now be installed into this location:
/home/qjzh/miniconda

安装完成之后要重启终端,anaconda才能生效。
在安装的过程中,会问你安装路径,直接回车默认就可以了。有个地方问你是否将anaconda安装路径加入到环境变量(.bashrc)中,输入yes,默认的是no,
如果没输入就要配置环境,根据提示,在终端输入sudo gedit /etc/profile,打开profile文件。添加语句export PATH=/home/xiaer/anaconda3/bin:$PATH,保存,退出。
重启终端,不行,重启Linux,
配置好PATH后,可以通过which conda或conda –version命令检查是否正确。
输入conda list 就可以查询,你现在安装了哪些库,常用的numpy, scipy名列其中。如果你还有什么包没有安装上,可以运行conda install * 来进行安装,
如果某个包版本不是最新的,运行 conda update * 就可以了。
3.验证,输入python 进行python环境
输入import scipy ,没有报错则安装成功
由于anaconda在linux下是安装在一个文件夹里/root/anaconda ,如果安装过程中出错问题,或者想更新另一个版本,删除anaconda也很方便,执行下面命令
rm -rf ~/anaconda

2.2、添加第三方源

TUNA 还提供了 Anaconda 仓库的镜像,运行以下命令:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
即可添加 Anaconda Python 免费仓库。
配置好国内的源后,软件的安装配置就很快了,连国外的会很慢
如果在安装库时,出现卡在如下界面

Fetching package metadata ...  

可能是因为源的问题,除了按上面的方法添加源外 ,还需要进行如下操作:
删除配置文件中的 -default 行
这里写图片描述

2.3、Conda 三方源

Conda Forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
msys2
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
bioconda
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
menpo
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
##2.5、Conda 安装第三方库
比如:conda安装opencv

conda install opencv 默认安装即可

2.6、Conda 的更新

conda update

2.7、用pycharm来安装python3.5环境

2.7.1、新建一个项目

这里写图片描述

2.7.2、创建python35环境

这里写图片描述

2.7.3、运行python代码

这里写图片描述

2.7.4、先进入虚拟环境,然后再运行程序

如果是直接在pycharm里然后利用上面的步骤来指定环境可能会失败,我尝试过的是在pycharm里通过指定编译器的python版,但失败了。
然后我在cmd下,先激活虚拟环境,然后再进入IDE目录,比如pycharm的目录,然后再启动pycharm,此时再在pycharm里指定环境,然后再运行相关算法是可以成功的。
在shell里激活虚拟环境,就相当于开了一个进程(不知道这样理解对不对),然后运行其他程序也在这个进程里,然后所以的事情当然就是在我们创建的虚拟环境下了。

3、conda使用

windows系统下,在cmd中写入命令或者在Anoconda prompt -python这个shell里进行,安装conda后,通过activate env_nameav切换到该python环境,以后的操作(安装、执行等都在该环境中)。
如果需要新的环境,切换过来就行。

那如果在同一个服务器上两个应用,一个使用python2.7 另一个使用python3.5,该如何控制呢?
激活某个环境后其实也只是在这个shell里有效,当关掉shell,python又会回到系统默认的版本,所以当不同的应用使用python里应该不在上面提到的问题。我们只需要考虑自己应用的需要来激活自己创建的环境,而不用考虑其他开发者
那是不是我每次运行个程序里还要重新敲命令来激活一下这个虚拟环境吗?有没有更方便的方法?当然有,你可以在程序中指定,只需将下列代码写进去即可:

#不知道这样行不行
通过双击py文件运行程序,那么首先确保py文件关联执行的程序是py.exe。其次在你的源文件头部添加
#! python
或
#! python3
或
#! /usr/bin/env python3
py.exe允许你在代码中表明该文件是使用Python2还是Python3解释,只要你在.py文件的开头加上(注意放在# -*- coding: utf-8 -*-前面)

如下所示:

在程序中激活(这个是virtualenv中的方法)
activate_this = '/usr/local/pythonV/bin/activate_this.py'  
execfile(activate_this, dict(__file__=activate_this))

3.1、环境管理

conda常用命令
查看当前系统下的环境

conda info -e

创建新的环境
查看相关的帮助

conda create --help

结果如下

usage: conda create [-h] [-y] [--dry-run] [-f] [--file FILE] [--no-deps] [-m]
                [--use-index-cache] [--use-local] [--offline] [--no-pin]
                [-c CHANNEL] [--override-channels]
                [-n ENVIRONMENT | -p PATH] [-q] [--copy] [--alt-hint]
                [--update-dependencies] [--no-update-dependencies]
                [--show-channel-urls] [--no-show-channel-urls] [--json]
                [--clone ENV] [--no-default-packages]  

# 指定python版本为2.7,注意至少需要指定python版本或者要安装的包# 后一种情况下,自动安装最新python版本
conda create -n env_name python=2.7
# 同时安装必要的包
conda create -n env_name numpy matplotlib python=2.7
#创建一个名为flask_py2.7,使用python2.7预装flask库的虚拟环境
conda create --name flask_py2 python=2 flask

环境切换

# 切换到新环境# linux/Mac下需要使用source activate env_name
activate env_name
#或者
source activate flask_py2
#退出环境,也可以使用`activate root`切回root环境
deactivate env_name
#或者
source deactivate

移除环境

conda remove -n env_name --all

3.2、python 管理

查看conda提供的python版本

conda search --full-name python

创建指定python版本的虚拟环境

conda create --name snakes python=3

可以通过以下命令,将虚拟环境安装到指定路径

conda create --prefix=D:\python36\py36 python=3.6

路径D:\python36是先建好的文件夹,py36是需要安装的虚拟环境名称。请注意,安装完成后,虚拟环境的全称包含整个路径,为D:\python36\py36。激活指定路径下的虚拟环境的命令如下

activate D:\python36\py36

想要删除指定路径下的虚拟环境,使用如下的命令:

conda remove --prefix=D:\python36\py36 --all

查看当前使用的Python版本

python --version

3.3、包管理

查看已经安装的package

conda list
# 指定查看某环境下安装的package
conda list -n env_name

给某个特定环境安装package有两个选择,一是切换到该环境下直接安装,二是安装时指定环境参数-n

activate env_nameconda install pandas
# 安装anaconda发行版中所有的包
conda install anaconda

conda install -n env_name pandas

如果当前已经激活了某个Python环境,那么就可以在当前环境开始安装第三方包。

# 安装 matplotlib 
conda install matplotlib
# 查看已安装的包
conda list 
# 包更新
conda update matplotlib
# 删除包
conda remove matplotlib

当然在conda里pip install等python原有的安装包的方式仍然可用。
查找包

conda search pyqtgraph

更新包

conda update numpy
conda update anaconda

卸载包

conda remove numpy
conda remove -n myenv scipy

3.4、环境配置中遇到的疑难杂症

3.4.1、64位系统和root环境下指定安装32位

# 设置32位set CONDA_FORCE_32BIT=1
conda create -n env_name python=2.7
conda install numpy pandas
# 切回系统默认set CONDA_FORCE_32BIT= 

3.4.2、设置国内镜像

很多包自动安装时都会直接连接国外资源,访问国外资源的网速简直不能忍,很有可能安装失败;如果有国内的镜像,就会很快。
清华大学TUNA镜像
网站有添加方法

# 需要去掉网址的引号
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set show_channel_urls yes

如果命令行方法添加不上,可以在用户目录下的.condarc中添加
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/:
如果没有该文件可以直接创建,Windows为C://Users/username/.condarc,Linux/Mac为~/.condarc
结果如下:

channels:
 - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
 - defaults
show_channel_urls: yes

3.4、安装jupyter notebook

conda install jupyter

安装完在命令行输入ipython notebook或jupyter notebook
就会在浏览器里打开notebook
Jupyter Notebook是一个基于浏览器的Python数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果。jupyter是它的升级版,它的安装也非常方便,一般Anaconda安装包中会自带。安装好以后直接输入jupyter notebook便可以在浏览器中使用。但是它默认只能在本地访问.
windows 下安装试相似。使用方法可参考在windows下使用jupyter notebook
如果想把它安装在服务器上,然后在本地远程访问,则需要进行如下配置:
Linux下远程访问Jupyter Notebook 配置

  1. 登陆远程服务器
  2. 生成配置文件
    $jupyter notebook --generate-config
    会有如下提示
Writing default config to: /home/qjzh/.jupyter/jupyter_notebook_config.py
  1. 生成密码
    打开ipython,创建一个密文的密码:
    输入:
In [1]:  from notebook.auth import passwd

In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:fca27ebda424:9b80ed33be4a390ff7da8e47*******4dede'

这里如果无法打开ipython,可以直接用命令行
root@docker_admin:~# python -c “import IPython;print IPython.lib.passwd()”
root@docker_admin:~# Enter password:
root@docker_admin:~# Verify password:
root@docker_admin:~# sha1:b86e933199ad:a02e9592e59723da722… #这是我的密码的hash值,后段被删除,你的密码得到的结果应该不同

把生成的密文‘sha:ce…’复制下来

  1. 修改默认配置文件

进行如下修改:

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口
  1. 启动jupyter notebook:
    $jupyter notebook
  2. 远程访问
    此时应该可以直接从本地浏览器直接访问http://address_of_remote:8888就可以看到jupyter的登陆界面。
  3. 建立ssh通道
    如果登陆失败,则有可能是服务器防火墙设置的问题,此时最简单的方法是在本地建立一个ssh通道:
    在本地终端中输入
    ssh username@address_of_remote -L127.0.0.1:1234:127.0.0.1:8888
    便可以在localhost:1234直接访问远程的jupyter了。

如何在jupyter中出现不能新建文件或不能保存文件,很可能是因为linux下创建文件夹的用户权限问题,可以在服务器上进行设置。
另一种解决方法是在创建的时候就以运行程序的用户身份创建,而不要在创建文件夹的指令前加sudo,因为加sudo就是以root身份创建了。

猜你喜欢

转载自blog.csdn.net/qingqing7/article/details/79092003