天天看點

python打包工具distutils的使用

參考:http://www.pythoncentral.io/package-python-django-application-reusable-component/

執行python setup.py sdist既可以打包

from distutils.core import setup
setup(
    name = "dennings",
    version = "0.0.2",
    author = "shijian",
    packages=['denning','templates'],
    py_modules=['__init__','config', 'manage', 'settings', 'urls','wsgi'],
    data_files=[('ini',['django_wsgi.ini']),('readme',['readme.txt'])]
)
           

寫完之後,發現靜态檔案都沒有打包。

然後檢視下打包資訊,你會發現:

表示,他在執行打包的時候,會寫入到這個檔案中。

那麼靜态檔案呢?

在項目目錄下,添加如下配置檔案MANIFEST.in:

檔案内容:

recursive-include templates *
不要忘記寫*
           

再次執行python setup.py sdist,顯示如下。

reading manifest template 'MANIFEST.in'
writing manifest file 'MANIFEST'
           
如果你的結果顯示warning,注意檔案的權限問題。
chmod +x  MANIFEST.in
           

參數說明:

1、name

site-package安裝目錄下的egg檔案:/usr/lib64/python2.6/site-packages/cython_build_test-0.0.0-py2.6.egg-info,如果不指定,将會與UNKNOW命名:/usr/lib64/python2.6/site-packages/UNKNOWN-0.0.0-py2.6.egg-info

2、packages告訴Distutils需要處理那些包(包含init.py的檔案夾)

3、package_dirs告訴Distutils哪些目錄下的檔案被映射到哪個源碼包。一個例子:package_dir = {‘’:lib},表示“root package”中的子產品都在lib目錄4、ext_modules是一個包含Extension執行個體的清單,Extension的定義也有一些參數,定義如下

5、ext_package定義extension的相對路徑

6、requires定義依賴哪些子產品

7、provides定義可以為哪些子產品提供依賴

8、scripts指定python源碼檔案,可以從指令行執行。在安裝時指定―install-script

9、package_data通常包含與包實作相關的一些資料檔案或類似于readme的檔案。如果沒有提供模闆,會被添加到MANIFEST檔案中。

10、data_files指定其他的一些檔案(如配置檔案)