1. 程式人生 > >實用工具---python執行環境部署

實用工具---python執行環境部署

主要解決的問題:
1、伺服器上的python版本較老,直接升級或安裝一些庫不知道會不會對其他人員的開發和應用產生影響,因而需要一些獨立的python執行環境,如何建立這樣的環境?
2、像編寫spark應用時,如果需要載入一些庫或自己編寫的類,這個時候就需要將相關庫和檔案與應用程式一起打包,如何打包?

conda工具介紹

關於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的所有人的英勇努力,這將是更有成果的,和相關工具鏈。

conda下載和安裝

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

新增第三方源

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 行
這裡寫圖片描述

Conda 三方源

conda install opencv 預設安裝即可

Conda 的更新

conda update

用pycharm來安裝python3.5環境

新建一個專案

這裡寫圖片描述

建立python35環境

這裡寫圖片描述

執行python程式碼

這裡寫圖片描述

先進入虛擬環境,然後再執行程式

如果是直接在pycharm裡然後利用上面的步驟來指定環境可能會失敗,我嘗試過的是在pycharm裡通過指定編譯器的python版,但失敗了。
然後我在cmd下,先啟用虛擬環境,然後再進入IDE目錄,比如pycharm的目錄,然後再啟動pycharm,此時再在pycharm裡指定環境,然後再執行相關演算法是可以成功的。
在shell裡啟用虛擬環境,就相當於開了一個程序(不知道這樣理解對不對),然後執行其他程式也在這個程序裡,然後所以的事情當然就是在我們建立的虛擬環境下了。

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))

環境管理

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

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

包管理

檢視已經安裝的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

環境配置中遇到的疑難雜症

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= 

設定國內映象

很多包自動安裝時都會直接連線國外資源,訪問國外資源的網速簡直不能忍,很有可能安裝失敗;如果有國內的映象,就會很快。
清華大學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

jupyter notebook安裝使用

Jupyter Notebook是一個基於瀏覽器的Python資料分析工具,使用起來非常方便,具有極強的互動方式和富文字的展示效果。jupyter是它的升級版,它的安裝也非常方便,一般Anaconda安裝包中會自帶。安裝好以後直接輸入jupyter notebook便可以在瀏覽器中使用。但是它預設只能在本地訪問.

jupyter notebook安裝

linux下安裝

conda install jupyter

安裝完在命令列輸入ipython notebook或jupyter notebook
就會在瀏覽器裡開啟notebook
上面是在虛擬環境中安裝,其實本質上jupyter notebook的安裝和安裝pandas這樣的庫是一樣的。所以那些庫的安裝方法都可以用到這裡來。
而在conda中conda的相關目錄是預設在系統環境變數中,但我們自己安裝的時候卻不一定;此時可以自己把jupyter notebook程式所在目錄新增到環境變數中,也可以建一個軟體連結到/usr/bin下。
windows下安裝
windows 下安裝試相似。
也可以進入虛擬環境後,用pip install jupyter來安裝

jupyter notebook使用

windows下使用jupyter notebook
使用方法可參考在windows下使用jupyter notebook
以windows環境為例,通過cmd進入虛擬環境後,執行jupyter notebook即可啟動jupyter notebook,如下圖在這裡插入圖片描述
此時也會彈出圖示的網頁
在這裡插入圖片描述
然後就可以選擇一個資料夾作為自己的工作目錄,可以新建pyhon程式,.ipynb作為字尾。可以對這些檔案重新命名,點操作。
在網頁中點開檔案後如下圖所示
在這裡插入圖片描述
可以在這個頁面上編寫程式,邊寫邊執行,可以顯示執行的結果,出錯了有錯誤提示,可以%matlilbplot 表示要顯示圖片結果;
還可以像寫markdown一樣,進行文字程式設計,因為程式是可以一塊一塊執行的。中間插入文字不影響程式除錯。
所以特別適合用來進行資料探索。
最終整個檔案還可以另存為markdown檔案,如果要作筆記的話,幾乎不需要重新編輯。程式執行顯示的圖片最終會二進位制編碼形式出現在markdown中,因為複製到其他地方也可以顯示圖片。但是這樣的圖片塊通常很大,如果圖片一多的話複製到網上可能造成顯示不了。但圖片少的話是沒問題的。

在伺服器上使用jupyter notebook

更多可參考:基於pyspark 和scala spark的jupyter notebook 安裝
在具體設定前我們先來理一理:
1)我們可以把jupyter notebook當成是python的網頁版開發環境,機器上相當於搭了一個jupyter notebook伺服器,我們在網頁上的程式設計會由jupyter notebook伺服器來處理,並與機器上的python程式互動。
2)遠端執行單機版的jupyter notebook,首先要保證本機可以執行jupyter notebook,過程同上面。如果伺服器沒有瀏覽器的話,執行jupyter notebook會有提示。
3)然後我們要允許伺服器上的jupyter notebook可以被遠端訪問。具體過程如下面《Linux下遠端訪問Jupyter Notebook 配置》所示。此時執行單機版的python程式是沒問題的。
4) 如果服務伺服器是分散式環境,在linux shell執行pyspark時,其實是執行spark/bin目錄下的pyspark。背後的分散式執行機制由spark由處理。
5)基於pyspark的jupyter notebook,就是要在伺服器執行pyspark時,預設是由jupyter notebook來執行,而不是在linux shell中。jupyter notebook只需要在某個節點安裝即可,我們登入jupyter notebook是一臺機器即,當jupyter notebook啟動pyspark之後,pyspark是分散式的,它自然會分散式的運算。

Linux下遠端訪問Jupyter Notebook 配置

  1. 登陸遠端伺服器
  2. 生成配置檔案
    $jupyter notebook --generate-configjupyter-notebook --generate-config
    由於後面是在普通使用者下執行jupyter-notebook,因而這裡也需要以普通使用者產生配置檔案,而不是root使用者,後面產生密碼也是普通使用者身份
    會有如下提示
Writing default config to: /home/digger/.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,可以直接用命令列
[email protected]_admin:~# python3 -c “import IPython;print(IPython.lib.passwd())”
[email protected]_admin:~# Enter password:
[email protected]_admin:~# Verify password:
[email protected]_admin:~# sha1:b86e933199ad:a02e9592e59723da722… #這是我的密碼的hash值,後段被刪除,你的密碼得到的結果應該不同

把生成的密文‘sha:ce…’複製下來

  1. 修改預設配置檔案
$vi ~/.jupyter/jupyter_notebook_config.py  # 注意目錄根據自己實際確定

進行如下修改:

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...剛才複製的那個密文'
c.NotebookApp.open_browser = False#關閉開啟瀏覽器,伺服器上一般沒有瀏覽器
c.NotebookApp.port =8888 #隨便指定一個埠
  1. 啟動jupyter notebook:
    $jupyter notebook
    在安裝jupyter-notebook的伺服器上執行notebook即可,可以看到此時的jupyter-notebook的地址不再是localhost:8888,而是剛剛配置的機器地址:8888
  2. 遠端訪問
    此時應該可以直接從本地瀏覽器直接訪問http://address_of_remote:8888就可以看到jupyter的登陸介面。
    在這裡插入圖片描述
    至此利用jupyter-notebook執行單機python程式的元件的安裝和配置就結束了。
  3. 建立ssh通道
    如果登陸失敗,則有可能是伺服器防火牆設定的問題,此時最簡單的方法是在本地建立一個ssh通道:
    在本地終端中輸入
    ssh [email protected]_of_remote -L127.0.0.1:1234:127.0.0.1:8888
    便可以在localhost:1234直接訪問遠端的jupyter了。

如何在jupyter中出現不能新建檔案或不能儲存檔案,很可能是因為linux下建立資料夾的使用者許可權問題,可以在伺服器上進行設定。
另一種解決方法是在建立的時候就以執行程式的使用者身份建立,而不要在建立資料夾的指令前加sudo,因為加sudo就是以root身份建立了。

基於pyspark的jupyter notebook

此處我們使用spark bin目錄下的pyspark連線notebook,即啟動./pyspark預設啟動notebook.只需要在全域性檔案./bashrc中設定即可。

開啟./bashrc檔案

vim ~/.bashrc

新增如下兩條全域性命令

export PYSPARK_DRIVER_PYTHON=jupyter 
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

但是我這樣新增不行,我改成

export PYSPARK_DRIVER_PYTHON=jupyter-notebook 
export PYSPARK_DRIVER_PYTHON_OPTS=".jupyter"

猜測原因是:PYSPARK_DRIVER_PYTHON設定的是pyspark執行python的版本,而我們是用jupyter notebook來執行python,故而因設定成jupyter notebook的執行程式;一般安裝jupyter notebookr後是用jupyter notebook來啟動jupyter notebook,但我的是jupyter-notebook,跟安裝方式或版本有關。
PYSPARK_DRIVER_PYTHON_OPTS設定的是pyspark對應python的一些配置資訊檔案路徑,這裡就是jupyter notebook的配置資訊檔案路徑。

我統一將環境變數寫到一個檔案中了。

在spark bin目錄下測試notebook是否安裝了pyspark

cd /root/spark/bin
./pyspark

在這裡插入圖片描述

成功即出現如下圖:
在這裡插入圖片描述

可以看到配置檔案的目錄預設就是jupyte notebook的工作目錄。應該是可以設定的。

由於只在一個節點安裝jupyter notebook,因而只能通過這個節點連線jupyter notebook,並執行pyspark程式。

連線伺服器上的單機版jupyter notebook速度還行。但pyspark感覺這樣連線伺服器並執行程式相當慢,不知道是我自己電腦配置達不到要求或者我的姿勢不對,還是這種模式就是慢。

相關推薦

實用工具---python執行環境部署

主要解決的問題: 1、伺服器上的python版本較老,直接升級或安裝一些庫不知道會不會對其他人員的開發和應用產生影響,因而需要一些獨立的python執行環境,如何建立這樣的環境? 2、像編寫spark應用時,如果需要載入一些庫或自己編寫的類,這個時候就需要將相關

Sublime Text3配置Python執行環境實用

1.     Sublime安裝PackageControl Sublime安裝各種外掛都是通過Package Control工具,需要先安裝Package Control包,按下快捷鍵Ctrl+`調出命令列,輸入以下程式碼即可 importurllib.request,

ngnix+uwsgi+django+python+mysql環境部署

configure 軟連接 環境 pre django com nal 追加 部署 django 一個python的web框架flask和django uwsgi一個Python的容器 nginx 一個web服務器 可以做web容器的前端 client--->

Python執行環境

Python直譯器啟動 一,python[options][-c cmd | filename | - ] [args] 選項 描述 -3 啟用將從python 3中刪除或更改某些功能的警告 -B 阻止在匯入時建立.pyc或.pyo檔案 -E 忽略環境變數 -h 列印所有可用命令列選

Python虛擬環境部署

虛擬環境用於隔離Python專案環境,為每個專案配置各自的執行環境。伺服器或本地開發環境均可配置多個虛擬環境(數量限制未親測~)。 1 開發環境 MacOS/Ubuntu python2.x/python3.x pip2/pip3 virtualenv

用virtualenv建立“獨立”的python執行環境

1. 用pip安裝virtualenv: $ pip install virtualenv   或者用apt install安裝: $ sudo apt install virtualenv 2. 建立目錄: 找一個位置,隨便(我是跟專案放在同一個根目錄下),進到該

學習筆記:從0開始學習大資料-19. storm開發及執行環境部署

一.eclipse strom開發環境 1. eclipse waven開發環境支援storm java程式開發很簡單,只要pom.xml 加入依賴即可 <dependency>     <groupId>org.apache.storm</

用virtualenv建立一個獨立的Python執行環境時報錯

[email protected]:~/桌面/myproject$ virtualenv --no-site-packages p1 New python executable in /hom

Linux (CentOS 7) 雲主機搭建JSP執行環境 + 部署專案

因為雲主機搭建JSP執行環境的文章比較少,內容較零散,所以我寫了比較完整的步驟,分享給大家,希望對大家有所幫助 我所使用的是乾淨的CentOS 7系統 一、大致步驟 JSP執行環境搭建與專案部署大概分以下5步 安裝配置JDK 安裝配置Tomcat伺服器 安裝配

Linux下搭建Python開發環境部署

1.安裝作業系統 系統版本CentOS release 6.5 (Final)mini安裝 關閉SELinux 關閉防火牆功能 關閉SSH的UseDNS功能 配置IP地址 配置DNS伺服器 配置NTP伺服器 配置主機名   2. Pyenv安裝方式 2.1

配置Sublime Text 2 的Python執行環境

Sublime Text 2作為一款輕量級的編輯器,特點鮮明,方便使用,愈發受到普羅大眾的喜愛,我個人最近也開始用了起來。同時,我近段時間還在學習Python的相關東西,所以開始用ST2來寫Python,所以把配置方法略微總結一下。 1. 在工具欄點選Preferenc

Python Django環境部署

工具下載 Pycharm MySQL Navigate for mysql 安裝 virtualenv pip install virtualenv 提示

使用Xshell工具遠端Linux環境部署web專案

一.什麼是Xshell Xshell是一個強大的安全終端模擬軟體,它支援SSH1, SSH2, 以及Microsoft Windows 平臺的TELNET 協議。Xshell 通過網際網路到遠端主機的安全連線以及它創新性的設計和特色幫助使用者在複雜的網路環境中享受他們的工作

給android手機上配置python執行環境

android手機是一臺完整的linux計算機,由於使用arm的架構,因此理論上所有支援arm的程式都可以執行在android手機上面,某人最近一直在學習python,因此突發奇想,把python裝到安卓手機上面,偶爾寫個指令碼,在命令列裡面執行一下,豈不快哉? 上網查

Linux(ubuntu)下Pycharm配置python執行環境(編譯器中匯入虛擬環境

Pycharm配置python的執行環境(Linux(ubuntu)、Windows) 前言 前段時間跑python程式碼,一直在編輯器中寫,命令列中呼叫執行。如果寫一些小程式還可以,但如果要搭建神經網路,用到tensorflow或theano這些深度框

如何安裝Python執行環境Anaconda?(視訊教程)

本視訊教程針對Windows平臺,整合3.6版本Python的Anaconda錄製。根據我多次線

windows+nginx+php執行環境部署

第一部分:準備工作。(系統:Windows 8.1) 1.首先是下載軟體。 2.安裝mysql軟體。 3.解壓NGINX和PHP到你自己安裝位置。這裡我在C盤新建一個資料夾:wnmp(windows,ngnix,myspq,php),把下面的軟體安裝到這個資

Python虛擬環境工具-Virtualenv 介紹及部署記錄

動態語言Ruby、Python都有自己的虛擬環境,虛擬環境是程式執行時的獨立執行環境,在同一臺伺服器中可以建立不同的虛擬環境供不同的系統使用,專案之間的執行環境保持獨立性而相互不受影響。例如專案A在基於Python2的環境中執行,而專案B可以在基於Python3的環境中執行。Python通virtualenv

使用python腳本代碼本地測試環境部署和啟動 V0.1

svn python #!/usr/bin/evn python#encoding=utf-8#author:[email protected]/* */import sysimport osimport shutilimport commandsimport timeimport sub

python 004 執行環境對比

為什麽 返回值 logs code ini dmi spa 執行 python 對比:os.system os.popen subprocess.Popen subprocess.call 為什麽要搞這麽多? # --*--encoding: utf-8--*-- im