讓你的 Python 程式被使用

  1. 如何成為一個安裝包
  2. 如何編譯模組
  3. 成為一個系統工具

基本款

先建立一個資料夾,以後裡面放自己的程式碼。

mkdir /tmp/sample
cd /tmp/sample
vim setup.py

把下面的程式碼放進去 setup.py

# 放進去 setup.py

#!/usr/bin/env python

from distutils.core import setup

setup(name='SetupSample',
        version='1.0',
        description='Example',
        author='Tim Hsu',
        author_email='[email protected]',
        url='https://www.python.org/sigs/distutils-sig/',
     )

這裏都只放一些很靜態的資訊而已。

python setup.py

傻傻地執行,可以看到一些建議的步驟

usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help

空空如也,一樣可以安裝


timdeMacBook-Pro:PySetupExample tim$ python setup.py --help-commands
Standard commands:

  build            build everything needed to install
  build_py         "build" pure Python modules (copy to build directory)
  build_ext        build C/C++ extensions (compile/link to build directory)
  build_clib       build C/C++ libraries used by Python extensions
  build_scripts    "build" scripts (copy and fixup #! line)
  clean            clean up temporary files from 'build' command
  install          install everything from build directory
  install_lib      install all Python modules (extensions and pure Python)
  install_headers  install C/C++ header files
  install_scripts  install scripts (Python or otherwise)
  install_data     install data files
  sdist            create a source distribution (tarball, zip file, etc.)
  register         register the distribution with the Python package index
  bdist            create a built (binary) distribution
  bdist_dumb       create a "dumb" built distribution
  bdist_rpm        create an RPM distribution
  bdist_wininst    create an executable installer for MS Windows
  upload           upload binary package to PyPI
  check            perform some checks on the package

最後真的來裝一下吧

sudo python setup.py install

然侯來看裝完的東西吧

pip freeze | grep SetupSample

恩... 恭喜大家完成一個空空如也的套件...

這裏是完整的文件

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

發佈你寫的一個模組

我們來發佈一個簡單的 Python 模組吧

vim hi.py

這裏是 hi.py 的內容

def say_hi():
    print "hi"

然後更新 setup.py (重點在最後一行)

setup(name='SetupSample',
        version='1.0',
        description='Example',
        author='Tim Hsu',
        author_email='[email protected]',
        url='https://www.python.org/sigs/distutils-sig/',
        py_modules = ['hi'], ## 這裏有差
     )

然後再裝一次

sudo python setup.py install

之後你在你系統的任何地方開啟 python shell 都可以 import hi

In [3]: import hi

In [4]: hi.say_hi
Out[4]: <function hi.say_hi>

In [5]: hi.say_hi()
hi

Scripts

Terminal 裡面的工具很帥(cat touch ls),我們也來做一個。

做一個 cat2 (偏不要加上副檔名 .py)


#!/usr/bin/env python
print "meow~"
#!/usr/bin/env python

from distutils.core import setup

setup(name='SetupSample',
        version='1.0',
        description='Example',
        author='Tim Hsu',
        author_email='[email protected]',
        url='https://www.python.org/sigs/distutils-sig/',
        py_modules = ['hi'],
        ## below are some magic
        scripts=['cat2', ],
     )

再裝一次

sudo python setup.py install

然後你就得到了 cat2 這個指令

來執行看看吧

cat2

最後

反安裝

pip uninstall SetupSample
pip freeze | grep Sam   #你會看到空空如也

把程式碼丟到 githib 上 (butbucket 也行)

這裏先提示一下作法:

先到 github 註冊帳號,開啟 Repository, 名字隨意

sudo rm -rf build
sudo rm -rf *.pyc
git init
git add *
git commit -m init

git remote add origin https://github.com/timtan/setup-py-example.git #這是你的 Repo,每人不同
git push -u origin master

之後

sudo pip install git+https://github.com/timtan/setup-py-example

URL 的前方要記得自己加上 git+ 都要自己加上去

這代表什麼呢?

代表你可以直接裝你自己放在 github 的套件了。

有些套件若你還沒有心理準備放到官方的 PyPi Repository, 那你可以先放在 github 上。