python打包库_Python 打包自己的库到 PYPI (可pip安装)
背景
在我們安裝 Python 庫的時候,通常我們都是pip install xxx
真是又酷炫又方便
那么,當我們自己寫了一些自認為不錯的庫,想要分享給大家使用(或者是想要裝X時)能不能也能做到這樣呢?
環境需求已經寫好能正常使用的庫/方法/項目 (可本地調用)
步驟創建一個這樣的目錄結構,我們接下來的命令都在 example_pkg/__init__.py 目錄進行
/packaging_tutorial
/example_pkg
__init__.py
2. 編輯 example_pkg/__init__.py ,寫入以下內容
name = "example_pkg"
3. 創建 packaging_tutorial/setup.py
setup.py 是 setuptools 的構建腳本,用于告知 setuptools 我們要上傳到PYPI的庫的信息(庫名、版本信息、描述、環境需求等)
下面是 setup.py 的示例
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="example-pkg-your-username",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
參數解析name:庫名
version:版本號
author:作者
author_email:作者郵箱(如:別人發現了bug或者提建議給我們添加功能聯系我們用的)
description:簡述
long_description:詳細描述(一般會寫在README.md中)
long_description_content_type:README.md中描述的語法(一般為markdown)
url:庫/項目主頁,一般我們把項目托管在GitHub,放該項目的GitHub地址即可
packages:使用setuptools.find_packages()即可,這個是方便以后我們給庫拓展新功能的(詳情請看官方文檔)
classifiers:指定該庫依賴的Python版本、license、操作系統之類的
4. 創建 packaging_tutorial/README.md ,向其寫入自己對該庫的簡介、描述
# Example Package
This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.
5. 創建 packaging_tutorial/LICENSE ,對于每一個創建的庫來說 LICENSE 是很重要的,這告訴大 家我們的庫能用在什么方面(商用?之類的)還有免責啊之類的;一般來說我們選擇MIT
MIT License
Copyright (c) [year] [fullname]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT LICENSE 的大概意思是軟件可以隨便用,隨便改
可以免費,可以收費
軟件的源文件里必須有這個許可證文檔
我提供這個軟件不是為了犯法,你要用它來犯法,那與我無關
你用這個軟件犯事了,責任全在你自己,與其他貢獻者無關
關于 setup.py 和 和 的寫法,大家可以參照我先前寫的 maida 庫,地址我會放在文末。
選擇自己的 LICENSE 可以點擊下方鏈接
6. 確保我們已安裝最新setuptools 和 wheel和twine ,下面是安裝/更新命令
python3 -m pip install --user --upgrade setuptools wheel twine
7. 打包的我們的庫/項目
python3 setup.py sdist bdist_wheel
此時在當前目錄我們會看到以下:
dist/
example_pkg_your_username-0.0.1-py3-none-any.whl
example_pkg_your_username-0.0.1.tar.gz
8. 使用 twine 將打包好的庫/項目上傳到PYPI
(需用到PYPI帳號密碼)(此時只是上傳到PYPI測試服,還不能 pip install 這個庫/項目)
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
我們會看到如下界面:
Uploading distributions to https://test.pypi.org/legacy/
Enter your username: [your username]
Enter your password:
Uploading example_pkg_your_username-0.0.1-py3-none-any.whl
100%|█████████████████████| 4.65k/4.65k [00:01<00:00, 2.88kB/s]
Uploading example_pkg_your_username-0.0.1.tar.gz
100%|█████████████████████| 4.25k/4.25k [00:01<00:00, 3.05kB/s]
上傳成功之后,我們可以去PYPI的測試服查看是否上傳成功,能上傳成功的話就說明肯定也能成功上傳到PYPI正式服(附:PYPI測試服地址)
PYPI測試服的管理員會不定期刪除上邊的庫,正式投入使用還是得上傳到正式服。
由于我先前有上傳庫到測試服,我們可以嘗試搜索看看
若是想測試下上傳到測試服的庫能否使用,可以使用如下命令
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-pkg-your-username
大致會出現以下:
Collecting example-pkg-your-username
Downloading https://test-files.pythonhosted.org/packages/.../example-pkg-your-username-0.0.1-py3-none-any.whl
Installing collected packages: example-pkg-your-username
Successfully installed example-pkg-your-username-0.0.1
若是從測試服安裝的我們的庫能正常使用,那么我們就可以開始行動把它上傳到PYPI正式服供大家使用了。(之所以特地提出這一步,是因為第一次上傳庫時,我們總會因為目錄結構不會、未打包成庫可正常使用打包了卻不能用等等原因導致上傳的是個“失敗的庫”,這樣能避免別人會安裝到我們的失敗庫)
簡單測試是否能正常使用直接如下即可,但具體里邊的功能能否正常用我們還需調用一下,此處不做介紹
>>> import example_pkg
>>> example_pkg.name
'example_pkg'
9. 【重頭戲】將庫上傳到 PYPI正式服
twine upload dist/*
上傳成功后該庫即可直接pip安裝
上傳PYPI示例庫LZC6244/maida?github.com
如果對目錄結構或者其他有什么不清楚的可以參考我這個庫(結構較簡單適合初學者),或者我們平時使用的庫(譬如本人平時經常使用 scrapy 也可以去 scrapy 主頁參考大佬的寫法)
2019.9.16更新
安裝自己庫的依賴庫
setup(
...
install_requires=[
'你的庫依賴的第三方庫(也可以指定版本)',
# exapmle
'pyautogui',
'Django >= 1.11, != 1.11.1, <= 2',
],
)
官方文檔傳送門
原創文章,轉載請保留或注明出處!
總結
以上是生活随笔為你收集整理的python打包库_Python 打包自己的库到 PYPI (可pip安装)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python后面空格报错_python中
- 下一篇: python运行时间过长怎么优化_Pyt