Flask 代碼打包

關(guān)鍵字 flask setuptools mvc blueprint pycharm python2.7.13

背景

基于flask開發(fā)了一款產(chǎn)品抗蠢,屆時會部署到客戶的環(huán)境亿絮,為了避免重要的代碼泄露厚柳,故而對部分代碼進行打包封裝。在這里blueprint不是必須要使用的凯砍,但樓主為了以后做準(zhǔn)備愤炸,這里也用上了。于是乎矾睦,開始一路嘗試...總結(jié)下分享給大家參考晦款。

開始

step1 pycharm創(chuàng)建flask項目

剛新建ok的項目,都是空的枚冗,不多說

step2 項目新建python package

  • 創(chuàng)建frame
  • 創(chuàng)建web
    • web下創(chuàng)建controller
      • calculate下添加calculate.py文件
  • 創(chuàng)建setup.py
    項目目前如圖:
Paste_Image.png

step3 coding

controller->_init__.py

from web import app
from web.controller.calculte 

import calculate_blueprint
app.register_blueprint(calculate_blueprint)

controller->calculate.py

from flask import Blueprint

calculate_blueprint = Blueprint('calculate', __name__,url_prefix='/calculate')


@calculate_blueprint.route('/')
def home():
      return 'calculate'

web->_init_.py:

from flask import Flask

app = Flask(__name__)

import controller

Flask-blueprint.py

from web import app


if __name__ == '__main__':name="zsf-test",
    version="1.0.0",
    description="zsf-test",
    author="zsf",
    author_email="zsfbest@gmail.com",
    long_description=textwrap.dedent("""zsf-test"""),
    packages=find_packages(),
    install_requires=[
        "Flask",
        "xmltodict",
    ],
    include_package_data=True,
    zip_safe=False,
)


    app.run(threaded=True)

setup.py

import setuptools
import textwrap
from setuptools import find_packages

if __name__ == "__main__":
    setuptools.setup(
        name="zsf-test",
        version="1.0.0",
        description="zsf-test",
        author="zsf",
        author_email="zsfbest@gmail.com",
        long_description=textwrap.dedent("""zsf-test"""),
        packages=find_packages(),
        install_requires=[
            "Flask",
            "xmltodict",
        ],
        include_package_data=True,
        zip_safe=False,
    )

step 4 代碼釋義

1.為何要在web下的_init_.py初始化app缓溅?

其實像剛創(chuàng)建好項目放在Flask-blueprint初始化也是可以的,這里是為了深度隱藏app初始化的一些內(nèi)容赁温,在web下的_init_.py 其實還會放請求攔截坛怪,日志初始化等功能性代碼淤齐。

2.web下的_init_.py為何先初始化app后在導(dǎo)入controller?

這里是因為controller需要導(dǎo)入web下的app來注冊藍圖袜匿。反過來說更啄,如果web下的_init.py還沒初始化app,controller下的_init.py就無法從web導(dǎo)入app沉帮,那直接就導(dǎo)入報錯锈死,更別談注冊藍圖。

3.setup.py代碼釋義

packages=find_packages()這里請務(wù)必使用這個函數(shù)來找需要打包的packages穆壕。最開始看了一篇博客待牵,寫法類似于 packages={'web'},后面解壓縮了打包后的文件一看,只把我的web第一級目錄打包進去了喇勋,web下的controller完全沒有缨该。

4.controller 下的代碼及Flask-blueprint.py代碼釋義

這里代碼都很簡單,就是藍圖的簡單實例川背,以及app的run贰拿。用manager來跑項目的自行擴展

5.附注

其實不添加setup.py 已經(jīng)可以運行了,右鍵Flask-blueprint.py文件熄云,run或debug膨更,然后瀏覽器訪問http://127.0.0.1:5000/calculate/ 會打印 calculate到頁面

step 5 開始打包

pycharm下直接alt f12 喚出自帶的terminal。執(zhí)行:
python setup.py sdist
刷新項目結(jié)構(gòu)會發(fā)現(xiàn)自動生成了dist,和zsf_test.egg-info文件夾.如圖所示:

Paste_Image.png

pip可以直接安裝dist下的壓縮包,代碼:
pip install zsf-test-1.0.0.tar.gz
解壓縮看一下缴允,如圖:

Paste_Image.png

樓主平時用linux系統(tǒng)開發(fā)荚守,用tar -zxvf 解壓的該文件,其他系統(tǒng)用戶自行解決练般〈Q可以看到所有的項目代碼都已經(jīng)打包進來了到這里。下面我們實際運用一下薄料,來驗證一下這個包是否能正常工作敞贡。

step 6 項目認(rèn)證

1.新建一個virtualenv

創(chuàng)建一個新的virtualenv并安裝之前生成好的python包

2.創(chuàng)建一個新的flask項目

創(chuàng)建一個新的flask項目,并使用剛剛創(chuàng)建的virtualenv運行
這兩步有難度的可以參考我的另一篇文章Python virtualenv
目前項目如圖:

Paste_Image.png
3.coding
from web import app

if __name__ == '__main__':
    app.run(port=1234)#為了和上個項目做區(qū)分摄职,特地?fù)Q個端口
4.運行setuptoolsTest.py

瀏覽器訪問http://127.0.0.1:1234/calculate/ 出現(xiàn)如圖效果

Paste_Image.png

step 7 結(jié)束

????新項目只導(dǎo)入app誊役,并啟動,其余代碼都在python packages里面谷市。至此蛔垢,一切都完成。屆時部署到客戶環(huán)境時歌懒,對于代碼起到一定程度的保護性(遇到python大神另說了)啦桌。
新年了,項目要上線,每天早上八點到公司寫的這篇文章甫男,有不清晰或者有漏洞的且改,請大家不吝賜教,本人積極改正板驳。也歡迎各路朋友關(guān)注本人又跛,陸續(xù)更新一點項目使用的心得給大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末若治,一起剝皮案震驚了整個濱河市慨蓝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌端幼,老刑警劉巖礼烈,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異婆跑,居然都是意外死亡此熬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門滑进,熙熙樓的掌柜王于貴愁眉苦臉地迎上來犀忱,“玉大人,你說我怎么就攤上這事扶关∫趸悖” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵节槐,是天一觀的道長搀庶。 經(jīng)常有香客問我,道長疯淫,這世上最難降的妖魔是什么地来? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任戳玫,我火速辦了婚禮熙掺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咕宿。我一直安慰自己币绩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布府阀。 她就那樣靜靜地躺著缆镣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪试浙。 梳的紋絲不亂的頭發(fā)上董瞻,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音,去河邊找鬼钠糊。 笑死挟秤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抄伍。 我是一名探鬼主播艘刚,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼截珍!你這毒婦竟也來了攀甚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤岗喉,失蹤者是張志新(化名)和其女友劉穎秋度,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钱床,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡静陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诞丽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲸拥。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧免,靈堂內(nèi)的尸體忽然破棺而出刑赶,到底是詐尸還是另有隱情,我是刑警寧澤懂衩,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布撞叨,位于F島的核電站,受9級特大地震影響浊洞,放射性物質(zhì)發(fā)生泄漏牵敷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一法希、第九天 我趴在偏房一處隱蔽的房頂上張望枷餐。 院中可真熱鬧,春花似錦苫亦、人聲如沸毛肋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽润匙。三九已至,卻和暖如春唉匾,著一層夾襖步出監(jiān)牢的瞬間孕讳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厂财,地道東北人油啤。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蟀苛,于是被迫代替她去往敵國和親益咬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容