setuptools小節

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/cp3alai/article/details/51115509

最近閒暇對python的setup.py做了簡單的瞭解,覺得可以做一個簡單的整理了.記錄下來.

話說這個玩意的選項着實太多,但是常用的也就那麼幾個...要自虐的可以去看看觀望英文文檔,我也是被虐了半天,發現寫了一大堆選項,結果栗子就給了四五個選項...

官網 : 

distutils : https://docs.python.org/2/distutils/

setuptools : http://pythonhosted.org/setuptools/setuptools.html


首先得說明一點,setuptools並不是獨立存在的,雖然在import的時候只需要導入setuptools即可,但是其實它僅僅是在distutils的基礎上做的拓展.下面就將幾個常用的選項.

1. name : 模塊名.

2. version :  版本號.

3. packages : 這個想必是最重要的選項了,指定路徑,可以理解成指定搜索的起點.

4. package_dir : 指定具體包的路徑

5. package_data : 指定包相關文件名及其路徑

6. data_files : 指定其它文件名

7. scripts : 指定可執行腳本.


這裏有3個點需要說明 :

a. packages和package_dir 這兩個選項,前者是指定頂層目錄,後者是指定帶有包的路徑

b. package_data和data_files,前者只能定位到相對路徑裏面,而後者可以爲其指定新路徑.

c. scripts選項的說明,我們要知道,setuptools的定位是包管理器,用來安裝python模塊的,如果我們爲模塊指定了一個入口的可執行文件,就可以把這個文件指定給scripts.


其它選項 : 

author : 作者

author_email : 作者郵箱

discription : 包描述

url : 項目主頁地址


選項介紹了一部分,還需要了解一下,setup.py的命令行選項,同樣是特別多啊.不過這把很幸運,只要瞭解幾個就可以了.

我瞭解了兩類:

1. 源碼壓縮包 sdist

2. 二進制文件. bdist_egg

其實我就着重瞭解了這兩個選項,倒也很有代表性.

前者壓出來的後綴是tar.gz,就是把一些meta信息和源文件放到一個壓縮包裏面.

後者後綴叫egg,其實別被騙了,就是zip的壓縮方式.裏面放的東西也類似.


再說下安裝路徑,我的機器是archlinux,python版本2.7,所以如果安裝成功了,包會放在/usr/lib/python2.7/site-packages 目錄下,而script指定的文件會放在/usr/bin目錄下.

data_files會放在你給它指定的路徑,一般這種指定配置文件比較好.package_dir放在site_packages目錄下.


好的,下面舉個例子來說明一下,

目錄樹如下 :


setup.py內容  :

#!/bin/python2
#coding:utf-8

from setuptools import setup, find_packages

# 留意每個選項的數據類型,很容易記混
setup(
        # 模塊名相關
        name = "sort",
        version = "1.0",

        # 作者相關
        author = "cp3alai",
        author_email = "[email protected]",

        # 描述相關,好像還有個選項叫description_long
        description = "this is a sort module, enjoy",

        # 導入文件相關
        packages = ["sort"],
        package_data = {"setup":["setup.readme"], "":["*.readme"]},
        data_files = [("/opt", ["test.readme"])],

        # 指定可執行文件
        scripts = ["test.py"],
     )

這裏我不打包了,直接運行./setup.py install 

就會在/usr/lib/python2.7/site-packages目錄下生成一個文件 : sort-1.0-py2.7.egg

/usr/bin目錄下生成文件test.py.

這樣就可以直接運行test.py了.


當然,這僅僅是setup.py最入門的用法.它還有很多選項.
如install_requires 指定安裝需要依賴的庫,另外還有個更厲害的選項,ext_modules,用來指定第三方拓展,目前支持c/c++,其成員爲extension,你可以對其指定源文件,頭文件目錄,庫文件目錄,還有編譯方式等等,編譯成功以後,就會在egg文件中生成一個so文件,不過因爲python和C/C++的結合我並沒有瞭解過,所以對這個選項只是簡單的實驗了一下.


後記 : 千萬千萬,重定向一下rm,昨晚寫的時候,誤刪了site-packages目錄...血的教訓啊.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章