1. 程式人生 > >【python】專案打包釋出

【python】專案打包釋出

概覽

這裡主要收集python專案的打包、釋出和部署的常用方法,只是入門級別,深入的流程還是以官方文件為準(連結每節都已經給出)。

簡介

  1. distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不支援依賴包的安裝 
      通過distutils來打包,生成安裝包,安裝python包等工作,需要編寫名為setup.py python指令碼檔案。

  2. setuptools - 針對 distutils 做了大量擴充套件, 尤其是加入了包依賴機制。不支援python3,安裝完setuptools後會有easy_install

  3. distribute - 類似於setuptools,支援python3,安裝完distribute後會有easy_install。

  4. easy_install - setuptools 和 distribute 自帶的安裝指令碼, 也就是一旦setuptools或distribute安裝完畢, easy_install 也便可用了。

  5. pip - 目標是取代easy_install。easy_install 有很多不足: 安裝事務是非原子操作, 只支援 svn, 沒有提供解除安裝命令, 安裝一系列包時需要寫指令碼; pip 解決了以上問題, 已儼然成為新的事實標準, virtualenv 與它已經成為一對好搭檔;

  6. distutils2 - setuptools 和 distribute 的誕生是因為 distutils 的不濟, 進而導致目前分化的狀況。它將成為 Python 3.3 的標準庫 packaging , 並在其它版本中以distutils2 的身份出現; 換句話說, 它和 pip 將聯手結束目前混亂的狀況。

  7. virtualenv - 用來建立隔離的python環境,處理python環境的多版本和模組依賴。

  8. 常識 
    • sudo apt-get install 安裝的package存放在 /usr/lib/python2.7/dist-packages目錄中
    • pip 或者 easy_install安裝的package存放在/usr/local/lib/python2.7/dist-packages目錄中
    • 手動從原始碼安裝的package存放在site-packages目錄中

一、distutils

  1. 新建資料夾(例如:distribution), 將專案檔案放進去
  2. 在該資料夾下,新建setup.py檔案

    • 編輯內容:

      from distutils.core import setup 
      setup( 
      name=’logIn’, #這個是最終打包的檔名 
      version=’1.0.0’, 
      py_modules=[‘logInr’], #要打包哪些,.py檔案, 
      )

    • 儲存退出
  3. 在命令列下,進入該資料夾,執行一下命令:

    • (1). 打包:python setup.py sdist 
      這樣在資料夾中就多出了幾個檔案,在dist資料夾中的,logIn-1.0.0.tar.gz就是我們的釋出包了;
    • (2). 安裝包到本地副本中(路徑為:/usr/local/lib/python2.7/dist-packages): 
      sudo python setup.py install (–record files.txt) 
      注意:為了方便解除安裝,可以新增括號中的選項(當前資料夾會產生files.txt), 解除安裝時就可以在當前資料夾下使用如下命令: 
      sudo cat files.txt | sudo xargs rm -rf

二、setuptools:

  1. setuptools 只是對distutils 的增強, 其使用過程還是一樣:

    編輯: 先在專案主目錄下編輯setup.py,
    打包: python setup.py sdist 
    安裝: sudo python setup.py install  (--record files.txt)
    解除安裝: sudo cat files.txt | sudo  xargs rm -rf
    
  2. setuptools工具的setup.py的模板

    • 模板 (只是一部分, 詳見官網說明)

      import ez_setup
      ez.setup.use_setuptools()   # 這兩行是當setuptools不存在時,自動從網上下載安裝所需的setuptools包.
      from setuptools import setup, find_packages
      setup(
          name = "HelloWorld",
          version = "0.1",
          packages = find_packages(),     # 常用,要熟悉 :會自動查詢當前目錄下的所有模組(.py檔案) 和包(包含__init___.py檔案的資料夾)
          scripts = ['say_hello.py'],
          # Project uses reStructuredText, so ensure that the docutils get
          # installed or upgraded on the target machine
          install_requires = ['docutils>=0.3'],       # 常用
          package_data = {
              # If any package contains *.txt or *.rst files, include them:
              '': ['*.txt', '*.rst'],
              # And include any *.msg files found in the 'hello' package, too:
              'hello': ['*.msg'],
          },
          # 
          entry_points = {
              'console_scripts': [
                  'foo = demo:test',
                  'bar = demo:test',
              ],
              'gui_scripts': [
                  'baz = demo:test',
              ]
          },
          # metadata for upload to PyPI
          author = "Me",
          author_email = "[email protected]",
          description = "This is an Example Package",
          license = "PSF",
          keywords = "hello world example examples",
          url = "http://example.com/HelloWorld/",   # project home page, if any
          # could also include long_description, download_url, classifiers, etc.
      )
      

三、virtualenv

  1. 主要命令:

        $ virtualenv ENV
        $ virtualenv --system-site-packages ENV   # 繼承系統原來的安裝包
        $ source bin/activate  # 啟動虛擬環境
        $ deactivate       # 退出環境
        $ rm -r /path/to/ENV   # 刪除環境
        $ virtualenv --relocatable ENV  #  創造可以浮動的虛擬環境
        $ virtualenv --extra-search-dir=/path/to/distributions ENV # 新增自定義版本的pip或setuptools        
    
  2. 移植:

        建立無繼承的虛擬環境
        virtualenv  --no-site-packages  PATH/to/projDirName
    
        進入projDirName, 編輯專案
        cd  PATH/to/projDirName
    
        退出,至上級目錄
        cd  ..
        virtualenv --relocatable   projDirName#  創造可以浮動的虛擬環境
    
        將整個資料夾複製到指定的機器上, 進入PATH/to/projDirName, 啟動環境,執行程式
    

四 、pip

  • 這裡只列出部署相關的兩條命令

        pip freeze  > requirements      #  freeze 是匯出當前環境安裝的安裝包
    
        pip install -r requirements.txt         # 這個requirements.txt 有格式要求

相關推薦

python專案打包釋出

概覽 這裡主要收集python專案的打包、釋出和部署的常用方法,只是入門級別,深入的流程還是以官方文件為準(連結每節都已經給出)。 簡介 distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不支援依賴包的安裝    通過

pythonpyinstaller 打包

起因 明日七夕好友表白在網上找到一個表白工具,地址如下 python表白工具 由於需要使用python才可以執行,故而使用pyinstaller 進行打包 程式碼說明 本文表白程式碼來自程式碼 檔案路徑 import sys im

Maven專案打包-war包-Jar包[IDEA將專案打成war包]

首先,專案必須得是Maven配置的專案。 增加了一個釋出外掛來實現。 在專案的pom.xml中增加如下程式碼: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http

python程式打包成可執行檔案

優點: 1. pyinstaller 是跨平臺的可以用在linux和windows系統上 2. 操作非常簡單,幾個命令就搞定了,這個比py2exe容易用多了 缺點: 1. 打包後的體積過大,因為要

Python打包壓縮軟體,命名軟體名為軟體的版型、遙控等資訊

原始碼: # -*- coding: utf-8 -*- #coding=utf-8 ''' 打包軟體指令碼 指令碼說明:打包後壓縮檔案的命名為(版型、屏參、遙控名、版本號、編譯時間等資訊) 注意事項:執行指令碼時需要帶該軟體的配置檔案的編號 執行方法:python zip.p

docker案例專案打包部署

docker compose用法 什麼是compose Compose是一個定義和管理多容器的工具,使用Python語言編寫。使用Compose配置檔案描述多個容器應用的架構,比如使用什麼映象、資料卷、網路、對映埠等;然後一條命令管理所有服務,比如啟

開發專案釋出引起的思考與總結

文章目錄場景思考與方案 場景 營銷系統中經常會有重構一個活動的需求,有時需要推翻原來的方案重新制定新的策略,就需要考慮新舊資料的相容,若存在快取的話,也需要考慮快取的更新,尤其是對於使用者流量比較大的活動,下面是一個細化的場景: 舊活動A有著很大的使用者流量,Q

Python專案打包釋出方法

        目前python打包工具有多個,目前比較好用的為pyinstaller,該工具可以支援在window和linux下使用。       在windows下,大小為幾十K的原始檔打包成exe檔案,可能為幾十

Python3.6版本py檔案打包生成exe

原文提到的要點: 1. Python版本32位 (檔名為 python-3.6.1.exe) 2. 安裝所有用到的模組(原文博主用的是openpyxl,我用到的有urllib中的request\config\data) 3. 下載替換pyinstaller(下載pyins

Python @classmethod 在實際專案中的應用

主要內容 在專案中,多數作用於獲取專案配置檔案的配置屬性。 例如,需要編寫一箇中間件test,程式碼如下 class A(object): def __init__(self, parms): self.parms = parms

python專案打包釋出總結

概覽 這裡主要收集python專案的打包、釋出和部署的常用方法,只是入門級別,深入的流程還是以官方文件為準(連結每節都已經給出)。 簡介 distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不

PythonPycharm同步Github專案

原文地址:http://zhidao.baidu.com/link?url=0P7DGHosch8byrCXK1lMcOkJ2LGqlP3ptVhDVbmkM4MKRRMW4z8m2anrbzJYjdtHyB_ebftbgUlxYnEdYYNEbrXW4IyfNhUTdBS

pythonpycharm中新開啟一個專案都提示no python interpreter的解決辦法

一、前言: 最近使用pycharm總是遇到這樣一個問題:每次開啟一個新的專案都會提示no python interpreter,意思是沒有找到python編譯器。具體表現方式就是: 二

pythonpycharm 如何快速建立scrapy專案

由於pycharm中無法直接建立scrapy 專案, 所以必須通過控制檯呼叫scrapy建立專案然後匯入到IDE中。 在網上查了一些資料,大多數都是要從terminal新增環境變數,其實不用那麼麻煩。我是用下pycharm中操作的: 1. 進入pycharm,點選file&

Python正則表達式1(未完)

pes mmu get regular rop 則表達式 line out github 1、正則表達式唯一的用途就是在文本中匹配和尋找模式,模式可以簡單,也可以復雜。 2、Regexr 這個網站很個性的就是,有一個community標簽,打開後可以看到評分由高到低

LeetCodePythonBinary Tree Inorder Traversal

nod 不知道 otto div ack return integer neu else Given a binary tree, return the inorder traversal of its nodes‘ values. For example: Gi

Python決策樹的python實現

uia bmp say 不知道 times otto outlook lru bgm 【Python】決策樹的python實現 2016-12-08 數據分析師Nieson 1. 決策樹是什麽? 簡單地理解,就是根據一些 feature 進行分類,每個節點提一個問

Python基礎知識

數據 文件 專用 一切都 元組 內存 引用傳遞 asc ilo 1. python腳本語言的第一行,目的就是指出,你想要你的這個文件中的代碼用什麽可執行程序去運行它 #!/usr/bin/python 是告訴操作系統執行這個腳本的時候,調用/usr/bin下

Pythonpython2.7 安裝配置OpenCV2

pen 2.4.1 安裝 so文件 strong make lib con ack 環境:Ubuntu16.04 anaconda Python2.7 opencv2.4.13 安裝opencv後 import cv2 遇到錯誤信息: No module named cv2

Python數組排序

log false blog sort函數 () ron 返回 imp 總結 1.numpy庫:argsort()   argsort函數返回的是數組值從小到大的索引值(升序排列) 一維: In [1]: import numpy as np In [2]: x