網(wǎng)上的教程很多,在此寫此篇僅為自己以后使用時(shí)查找方便,第一次嘗試,有錯(cuò)誤歡迎留言糾正!
1. 代碼打包
要打包代碼,首先需要編寫自己的代碼包。比如你寫了一個(gè).py文件,里面有一些函數(shù)啥的,為了方便調(diào)用,你需要將代碼打包,下次使用時(shí)直接調(diào)用就好,因此,第一步,將你寫的代碼打包。
創(chuàng)建一個(gè)文件夾,并在該文件夾下創(chuàng)建 __init__.py 文件,然后將你寫的.py文件放到這個(gè)文件夾下面就行。
packagename/
|
+-- __init__.py
|
+-- myfunction.py
|
+-- mymorefunction.py
|
+-- ...
|
packagename為你創(chuàng)建的包名稱,myxxx.py是你寫的python代碼,還有添加個(gè)__init__.py文件(文件內(nèi)容可以為空).
現(xiàn)在你可以調(diào)用這個(gè)包了(引入包的路徑)
import packagename
2. 符合pypi的格式
將上面的文件的目錄結(jié)構(gòu)改成如下格式
packagename
|
+-- COPYING.txt
|
+-- README.rst
|
+-- setup.py
|
+-- packagename
. |
. +-- __init__.py
. |
. +-- myscripts1.py
. |
. +-- mysscripts2.py
. |
. +-- mymorescripts.py
. |
.
|
+-- docs/
|
就是將原來的目錄深移一層,文件夾的名稱一樣即可。在第一層目錄下創(chuàng)建些特殊文件。
Tips
- COPYING.txt :可以不要(節(jié)約時(shí)間,重要的事情先說、簡單說)。
就是授權(quán)文件,里面是你關(guān)于這個(gè)包的授權(quán),比如:MIT license,那么你里面放入MIT License全文即可,當(dāng)然,如果你不清楚這個(gè),你完全可以不要這個(gè)文件。- README.rst:就是介紹,可以不要吧(不推薦,要是想讓大家用的話還是好好寫一寫)
這個(gè)文件想必研發(fā)都應(yīng)該清楚。如果有,盡量放些東西在這里了,后面如果可能我們會用到它的。- setup.py:核心文件
這里面的內(nèi)容后面講- docs/(這是個(gè)文件夾,存放一些文檔的)
這個(gè)文件夾你放你的documents吧,不過要用心寫文檔真是個(gè)難事,所以這個(gè)文件夾基本是不存在的——為自己的懶惰可恥一把。
setup.py的樣例
# coding: utf-8
import codecs
import os
import sys
try:
from setuptools import setup
except:
from distutils.core import setup
"""
打包的用的setup必須引入,
"""
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
if sys.version_info < (2, 5):
sys.exit('Python 2.5 or greater is required.')
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
import SendMoney
with open('README.rst', 'rb') as fp:
readme = fp.read()
# 版本號,自己隨便寫
VERSION = "1.0.7"
LICENSE = "MIT"
setup(
name='<項(xiàng)目的名稱>',
version=VERSION,
description=(
'<項(xiàng)目的簡單描述>'
),
long_description=readme,
author='<你的名字>',
author_email='<你的郵件地址>',
maintainer='<維護(hù)人員的名字>',
maintainer_email='<維護(hù)人員的郵件地址',
license=LICENSE,
packages=find_packages(),
platforms=["all"],
url='<項(xiàng)目的網(wǎng)址,我一般都是github的url>',
install_requires=[
"beautifulsoup4",
lxml_requirement
],
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)
# URL 你這個(gè)包的項(xiàng)目地址,如果有,給一個(gè)吧,沒有你直接填寫在PyPI你這個(gè)包的地址也是可以的
# INSTALL_REQUIRES 模塊所依賴的python模塊
# 以上字段不需要都包含
文中的classifiers的內(nèi)容并不是隨便填寫的,你需要參照本文參考文檔中的PyPI Classifiers來寫
3、開始使用Distutils進(jìn)行打包
為了保證效果,在打包之前我們可以驗(yàn)證setup.py的正確性,執(zhí)行下面的代碼
python setup.py check
輸出一般是running check
如果有錯(cuò)誤或者警告,就會在此之后顯示
沒有任何顯示表示Distutils認(rèn)可你這個(gè)setup.py文件。
如果沒有問題,那么就可以正式打包,執(zhí)行下面的代碼:
python setup.py sdist
執(zhí)行完成后,會在頂層目錄下生成dist目錄和egg目錄
打包完成后就可以準(zhǔn)備將打包好的模塊上傳到pypi了,首先你需要在pypi上進(jìn)行注冊
注冊完成后,你需要在本地創(chuàng)建好pypi的配置文件,不然有可能會出現(xiàn)使用http無法上傳到pypi的問題
在用戶目錄下創(chuàng)建.pypirc文件,文件的內(nèi)容如下(小提示:window用戶創(chuàng)建.pypirc可以命名為.pypirc.)
[distutils]
index-servers=pypi
[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>
完成后運(yùn)行:
python setup.py register sdist upload
最后出現(xiàn)Server response (200): OK就是成功了,可以去pypi上查看自己發(fā)布的包
包到這里,就完成了上傳PyPI的工作了。你如果要用,安裝下就好:
pip install packagename
這個(gè)過程還是很順利的,以后多嘗試,出現(xiàn)問題再補(bǔ)充!