纯Python包发布setup脚本编写示例
純Python包發布setup腳本編寫示例
2014 年 6 月 23 日IT、PythonIT、python如果你有多個模塊需要發布,而它們又存在于多個包中,那么指定整個包比指定模塊可能要容易地多。即使你的模塊并不在一個包內,這種做法也行的通;你可以告訴Distutils從根包(root package)處理模塊,并且它工作起來和其他任意的包一樣(除非你不需要擁有一個__init__.py文件)。
例1.1 根包發布
文件結構為:
<root>/setup.pyfoo.pybar.pysetup腳本可以這樣寫:
from distutils.core import setupsetup(name='foobar',version='1.0',packages=[''],)(空字符串表示根包)
例1.2 根包發布(模塊在子目錄)
如果你把上例中兩個模塊文件移入到一個子目錄,但是它們仍在根包中,如:
<root>/setup.pysrc/foo.pybar.py那么將仍然指定根包,但是你必須告訴Distutils那些源文件在哪里:
from distutils.core import setupsetup(name='foobar',version='1.0',package_dir={'': 'src'},packages=[''],)例2.1 包發布
如果你想發布在同一包中(或者在子包中)的多個模塊。比如,如果foo 和bar 模塊屬于包foobar,文件結構如下:
<root>/setup.pyfoobar/__init__.pyfoo.pybar.py實際上這是Distutils默認的層次,一個精簡的setup腳本可以這樣寫:
from distutils.core import setupsetup(name='foobar',version='1.0',packages=['foobar'],)例2.2 包發布(模塊所在目錄名不是包名)
如果你想將模塊放入不是包名的目錄,那么你還需要用到package_dir參數。例如,如果在foobar 包中src 目錄擁有多個模塊:
<root>/setup.pysrc/__init__.pyfoo.pybar.py合適的setup腳本將會是:
from distutils.core import setupsetup(name='foobar',version='1.0',package_dir={'foobar': 'src'},packages=['foobar'],)例2.3 包發布(包存在于根目錄)
或者你想把包放在發布根目錄,如:
<root>/setup.py__init__.pyfoo.pybar.py這種情況下你的setu腳本將會是:
from distutils.core import setupsetup(name='foobar',version='1.0',package_dir={'foobar': ''},packages=['foobar'],)(空字符串同樣也代表當前目錄)
例2.4 包發布(多子包)
如果你有多個子包,它們必須被顯在地列舉在packages參數中,但是其他任何在package_dir參數中的實體自動擴展到子包。(換句話說,Distutils并不瀏覽你的源文件樹(source tree),而是通過尋找__init__.py文件來計算相應Python包的目錄。)因此,如果默認的層次有一個子包:
<root>/setup.pyfoobar/__init__.pyfoo.pybar.pysubfoo/__init__.pyblah.py那么相應的setup腳本將會是:
from distutils.core import setupsetup(name='foobar',version='1.0',packages=['foobar', 'foobar.subfoo'],)注意:發布一個包,就是將該包所在目錄所有模塊全部發布。那么我們就不能只發布包內部分模塊。
例如,文件結構如下:
<root>/setup.pysub_package1/__init__.pysub_model1sub_model2sub_package2/__init__.pysub_model3使用Distutils,我們無法在發布包sub_packe1和sub_package2的同時,不發布sub_model2模塊。
本例來源stackoverflow:How to distributing a Python package(just distributing some model in sub package)
- 參考資料:Pure Python distribution (by package)
- 延伸閱讀:Distributing Python Modules
總結
以上是生活随笔為你收集整理的纯Python包发布setup脚本编写示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 岗位多多,招聘 23人 | 中国农业科学
- 下一篇: python如何调用c编译好可执行程序