Submit自己的專案到pypi

前一陣子看同事用自己在pypi上的專案部署,一行指令就可以完成安裝package感覺挺酷的

pip install xxxx

正好最近想寫一個把Get Request轉成POST Request的小http proxy
https://github.com/del680202/g2p

就借此機會來嘗試submit自己的專案到pypi去吧
參考:http://peterdowns.com/posts/first-time-with-pypi.html

節錄幾個重點,

1.註冊帳號

首先必須註冊PyPI LivePyPI Test的帳號

註冊好之後還必須確定帳號有透過email確認過,不然可能之後的操作會跑出如下訊息

Server response (401): Incomplete registration; check your email

可以的話順便再註冊一個github帳號來用用(雖說這跟pypi沒有關係),可以在自己的module裏面登入自己的github也蠻爽的

2.產生~/.pypirc

.pypirc是設定用來登入pypi跟pypitest,這個設定方式試用mac或是其他linux。
windows就請參考其他網頁

~/.pypirc的設定如下

index-servers =
  pypi
  pypitest

[server-login]
username:xxx
password:xxx

[pypi]
repository: https://pypi.python.org/pypi
username:xxx
password:xxx

[pypitest]
repository: https://testpypi.python.org/pypi
username:xxx
password:xxx

username跟password各自輸入自己在pypi登入的帳號密碼server-login用pypi的帳號密碼就行了

覺得麻煩的話就pypi跟pypiytest設定一樣帳號密碼也是個變通的選擇

3.產生專案目錄

假設python的專案放在mypackage下,那mypackage的結構大概會長得如下

-mypackage
 |
 -- source_code/*.py
 |
 -- setup.py
 |
 -- MANIFEST.in
 |
 -- README.md
 |
 -- LICENSE.txt

其中一定要有的是setup.py跟README

他們最好放在專案目錄的頂層,而README如果不用markdown形式的話就要取名README.txt
如果想用README.md這個檔名的話就要在新增一個MANIFEST.in檔案
因為一般setup.py只會打包.py的檔案,如果有其他想打包的檔案就要用MANIFEST.in指定
LICENSE.txt的話就看個人想不想放了

上面那些檔案去github找人家寫好的來改就行了

MANIFEST.in
*.md

上面設定在打包的時候順便打包.md檔

setup.py

寫法有很多種,網路上找個順眼的改就行了,這邊以我的g2p專案為例

from setuptools import setup, find_packages

classifiers = [
    'Development Status :: 4 - Beta',
    'Environment :: Web Environment',
    'Intended Audience :: Developers',
    'Intended Audience :: System Administrators',
    'License :: OSI Approved :: BSD License',
    'Operating System :: MacOS',
    'Operating System :: POSIX',
    'Operating System :: Unix',
    'Operating System :: Microsoft',
    'Operating System :: OS Independent',
    'Programming Language :: Python :: 2.7',
    'Topic :: Internet :: Proxy Servers',
    'Topic :: Internet :: WWW/HTTP :: HTTP Servers',
]

setup(
    name                = 'g2p',
    version             = '0.4',
    description         = 'HTTP Proxy Server in Python, Convert GET to POST',
    long_description    = open('README.md').read().strip(),
    author              = 'Terrence Chin',
    author_email        = 'del680202@gmail.com',
    url                 = 'https://github.com/del680202/g2p',
    license             = 'BSD',
    packages            = find_packages(),
    install_requires    = [],
    classifiers         = classifiers,
    entry_points        = {
         'console_scripts': [
            'g2p = g2p.g2p:main'
        ] 
    }

name跟version是pypi上參考的依據,當要升級或是更新的時候該version的設定就好了
比較種要的是packages,如果有很多package在專案裡面的時候,用find_packages會是一個比較簡單的選擇
entry_points並非必要只是我希望我安裝之後可以變成執行檔執行
其他設定網路上可以找到很多範例了

打包測試
python setup.py sdist

之後會在mypackage/dist下看到打包檔,檢查一下內容有沒有缺大致上就行了

4.上傳到pypi

首先先丟到測試那邊

python setup.py register -r pypitest
python setup.py sdist upload -r pypitest

想辦法讓自己的測試不要出錯,回傳下面訊息就可以繼續了

Server response (200): OK

題外話,其實不要寫測試也不會有什麼問題就是

再來上傳到pypi

python setup.py register -r pypi
python setup.py sdist upload -r pypi

上傳成功後可以在https://pypi.python.org/pypi
看到最新上傳的package,看到自己的專案在上面就ok了

測試

找台電腦安裝測試

pip install mypackage

通常安裝上不會有什麼問題,但是在import還是做成可執行的時候就不一定了.
如果使用上有問題通常都是setup.py要調整,這邊就看個人專案去調整了.

comments powered by Disqus