本文目錄一覽:
如何將自己的Python代碼打包發布到pypi上
什麼是pypi
簡單的說pypi是一個python包的倉庫,裡面有很多別人寫好的python庫,你可以通過easy_install或者pip進行安裝,方便用戶更方面的使用你的代碼模塊。
將代碼打包並上傳到pypi上,大體上分為以下幾步:
1、整理代碼的目錄結構,方便打包和python的import,為了方便引用,需要將代碼模塊變成一個包,所以需要將功能代碼用目錄來整合方便引用,並且需要創建__init__文件,__init__中可以沒有內容,也可以在__init__文件中進行import(from .extractor import Document)操作,以減少整體模塊引用時import的層數,避免錯誤。
[html] view plain copy
├── ./tidypage
│ ├── ./tidypage/cleaners.py
│ ├── ./tidypage/extractor.py
│ ├── ./tidypage/__init__.py
│ └── ./tidypage/titles.py
2、功能模塊的目錄整理好後,就可以開始整理和添加發布到pypi上所使用的文件了
tidy_page
├── LICENSE
├── README.rst
├── requirements.txt
├── setup.py
├──tidypage
│ ├──cleaners.py
│ ├──extractor.py
│ ├──__init__.py
│ └──titles.py
就是將原來的目錄深移一層,文件夾名稱可以根據自己意願。然後在到第一層的目錄下創建些特殊文件,具體你可以看看下面這個文件結構你就明白了
LICENSE文件是授權文件,比如:MIT license, APACHE license
README.rst 文件想必大家都不陌生,其實就是項目介紹和使用說明
setup文件才是重點,是python模塊安裝所需要的文件,它的格式如下:
#!/usr/bin/env python
from __future__ import print_function
from setuptools import setup, find_packages
import sys
setup(
name=”tidy-page”,
version=”0.1.1″,
author=”Desion Wang”,
author_email=”wdxin1322@qq.com”,
description=”html text parser,get the content form html page”,
long_description=open(“README.rst”).read(),
license=”MIT”,
url=””,
packages=[‘tidypage’],
install_requires=[
“beautifulsoup4”,
lxml_requirement
],
classifiers=[
“Environment :: Web Environment”,
“Intended Audience :: Developers”,
“Operating System :: OS Independent”,
“Topic :: Text Processing :: Indexing”,
“Topic :: Utilities”,
“Topic :: Internet”,
“Topic :: Software Development :: Libraries :: Python Modules”,
“Programming Language :: Python”,
“Programming Language :: Python :: 2”,
“Programming Language :: Python :: 2.6”,
“Programming Language :: Python :: 2.7”,
],
)
NAME 名字,一般放你包的名字即可PACKAGES 包含的包,可以多個,這是一個列表DESCRIPTION 關於這個包的描述LONG_DESCRIPTION 參見read方法說明KEYWORDS 關於當前包的一些關鍵字,方便PyPI進行分類。AUTHOR 誰是這個包的作者,寫誰的名字吧AUTHOR_EMAIL 作者的郵件地址URL 你這個包的項目地址,如果有,給一個吧,沒有你直接填寫在PyPI你這個包的地址也是可以的VERSION 當前包的版本,這個按你自己需要的版本控制方式來LICENSE 授權方式INSTALL_REQUIRES 模塊所依賴的python模塊
文中的classifiers的內容並不是隨便填寫的,你需要參照本文參考文檔中的PyPI Classifiers來寫
3、開始使用Distutils進行打包
為了保證效果,在打包之前我們可以驗證setup.py的正確性,執行下面的代碼
python setup.py check
輸出一般是running check如果有錯誤或者警告,就會在此之後顯示沒有任何顯示錶示Distutils認可你這個setup.py文件。
如果沒有問題,那麼就可以正式打包,執行下面的代碼:
python setup.py sdist
執行完成後,會在頂層目錄下生成dist目錄和egg目錄
tidy_page
├── tidy_page/dist
│ ├── tidy_page/dist/tidy-page-0.1.0.tar.gz
│ └── tidy_page/dist/tidy-page-0.1.1.tar.gz
├── tidy_page/LICENSE
├── tidy_page/README.rst
├── tidy_page/setup.py
├── tidy_page/tidypage
│ ├── tidy_page/tidypage/cleaners.py
│ ├── tidy_page/tidypage/extractor.py
│ ├── tidy_page/tidypage/__init__.py
│ └── tidy_page/tidypage/titles.py
├── tidy_page/tidy_page.egg-info
│ ├── tidy_page/tidy_page.egg-info/dependency_links.txt
│ ├── tidy_page/tidy_page.egg-info/PKG-INFO
│ ├── tidy_page/tidy_page.egg-info/requires.txt
│ ├── tidy_page/tidy_page.egg-info/SOURCES.txt
│ └── tidy_page/tidy_page.egg-info/top_level.txt
4、打包完成後就可以準備將打包好的模塊上傳到pypi了,首先你需要在pypi上進行註冊 goto PyPI Live
註冊完成後,你需要在本地創建好pypi的配置文件,不然有可能會出現使用http無法上傳到pypi的問題
Create a .pypirc configuration file,在用戶的home目錄下創建.pypirc文件,文件的內容如下
[distutils]index-servers = pypi[pypi]repository=
chmod 600 ~/.pypirc
python setup.py register -r pypi
在pypi上註冊模塊
python setup.py sdist upload -r pypi
上傳python文件包,沒有問題你就可以在pypi上看到你上傳的包了並且可以使用pip搜索和install你的python包了
如何讓自己的 python 代碼更有逼格
遵循python之禪的規範
使用lamda表達式
使用函數式編程
python之禪:
優美勝於醜陋(Python 以編寫優美的代碼為目標)
明了勝於晦澀(優美的代碼應當是明了的,命名規範,風格相似)
簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)
複雜勝於凌亂(如果複雜不可避免,那代碼間也不能有難懂的關係,要保持介面簡潔)
扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
可讀性很重要(優美的代碼是可讀的)
即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫 except:pass 風格的代碼)
當存在多種可能,不要嘗試去猜測
而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
雖然這並不容易,因為你不是 Python 之父(這裡的 Dutch 是指 Guido )
做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
如何調用自己寫的python函數
首先將你寫的函數以.py的形式保存起來,如a. py(好像不能直接用數字),其中你寫的函數為function()。
然後在a.py的run-python Shell中輸入:
import a
a.function(objection)就可以了
如何創建自己的python包
用distutils製作自己的安裝包
看下面的例子:
mylib.py 文件
def add(x,y):
return x+y
def division(x,y):
return x/y
def mutiply(x,y):
return x*y
def subtract(x,y):
return x-y
def main():
pass
if __name__ == ‘__main__’:
main()
簡單的方法可以進入到mylib.py存放的目錄,然後import mylib就可以使用它提供的方法了。但是如果項目比較大,需要很多人協作的話,這樣就非常不方便。這時候可以使用distutils標準庫。於是我們可以在mylib.py同級目錄下再創建一個setup.py,它的內容如下:
from distutils.core import setup
setup(name=’mylib’,
version=’1.0′,
py_modules=[‘mylib’],
)
name是指定的包名,version是版本號,py_modules里包含需要安裝的python文件,本例中即為mylib.py文件。
編寫好setup.py後,就可以使用
python setup.py install
把它安裝到系統中了。
要把自己的安裝包上傳到PyPI上,從而像其他安裝包一樣可以試用easy_install 或 pip安裝的話,就需要遵循PEP241,給出足夠的元數據才行,比如對包的描述,作者的信息,授權方式,主頁等,具體的可以查詢文檔。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183414.html