① 如何將自己的python代碼打包發布到pypi上
什麼是pypi
簡單的說pypi是一個python包的倉庫,裡面有很多別人寫好的python庫,你可以通過easy_install或者pip進行安裝,方便用戶更方面的使用你的代碼模塊。
將代碼打包並上傳到pypi上,大體上分為以下幾步:
1、整理代碼的目錄結構,方便打包和python的import,為了方便引用,需要將代碼模塊變成一個包,所以需要將功能代碼用目錄來整合方便引用,並且需要創建__init__文件,__init__中可以沒有內容,也可以在__init__文件中進行import(from .extractor import Document)操作,以減少整體模塊引用時import的層數,避免錯誤。
[html]viewplain
├──./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, APACHElicense
README.rst 文件想必大家都不陌生,其實就是項目介紹和使用說明
setup文件才是重點,是python模塊安裝所需要的文件,它的格式如下:
#!/usr/bin/envpython
from__future__importprint_function
fromsetuptoolsimportsetup,find_packages
importsys
setup(
name="tidy-page",
version="0.1.1",
author="DesionWang",
author_email="[email protected]",
description="htmltextparser,getthecontentformhtmlpage",
long_description=open("README.rst").read(),
license="MIT",
url="https://github.com/desion/tidy_page",
packages=['tidypage'],
install_requires=[
"beautifulsoup4",
lxml_requirement
],
classifiers=[
"Environment::WebEnvironment",
"IntendedAudience::Developers",
"OperatingSystem::OSIndependent",
"Topic::TextProcessing::Indexing",
"Topic::Utilities",
"Topic::Internet",
"Topic::SoftwareDevelopment::Libraries::PythonMoles",
"ProgrammingLanguage::Python",
"ProgrammingLanguage::Python::2",
"ProgrammingLanguage::Python::2.6",
"ProgrammingLanguage::Python::2.7",
],
)
文中的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上進行注冊gotoPyPI Live
注冊完成後,你需要在本地創建好pypi的配置文件,不然有可能會出現使用http無法上傳到pypi的問題
Create a.pypircconfiguration file,在用戶的home目錄下創建.pypirc文件,文件的內容如下
[distutils]index-servers=pypi[pypi]repository=https://pypi.python.org/pypiusername=your_usernamepassword=your_passwor
chmod600~/.pypirc
pythonsetup.pyregister-rpypi
在pypi上注冊模塊
python setup.py sdist upload -r pypi
上傳python文件包,沒有問題你就可以在pypi上看到你上傳的包了並且可以使用pip搜索和install你的python包了
② python怎麼打包整個項目
distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不支持依賴包的安裝
通過distutils來打包,生成安裝包,安裝python包等工作,需要編寫名為setup.py python腳本文件。
setuptools - 針對 distutils 做了大量擴展, 尤其是加入了包依賴機制。不支持python3,安裝完setuptools後會有easy_install
distribute - 類似於setuptools,支持python3,安裝完distribute後會有easy_install。
easy_install - setuptools 和 distribute 自帶的安裝腳本, 也就是一旦setuptools或distribute安裝完畢, easy_install 也便可用了。
pip - 目標是取代easy_install。easy_install 有很多不足: 安裝事務是非原子操作, 只支持 svn, 沒有提供卸載命令, 安裝一系列包時需要寫
腳本; pip 解決了以上問題, 已儼然成為新的事實標准, virtualenv 與它已經成為一對好搭檔;
distutils2 - setuptools 和 distribute 的誕生是因為 distutils 的不濟, 進而導致目前分化的狀況。它將成為 Python 3.3 的標准庫
packaging , 並在其它版本中以distutils2 的身份出現; 換句話說, 它和 pip 將聯手結束目前混亂的狀況。
virtualenv - 用來創建隔離的python環境,處理python環境的多版本和模塊依賴。
常識
sudo apt-get install 安裝的package存放在 /usr/lib/python2.7/dist-packages目錄中
pip 或者 easy_install安裝的package存放在/usr/local/lib/python2.7/dist-packages目錄中
手動從源代碼安裝的package存放在site-packages目錄中。
更多學習內容,請點擊Python學習網!
③ 如何將python程序打包為exe
1、安裝PyInstaller 3.0
(1)下載:PyInstaller/3.0,2015-10-04更新;【PyInstaller-3.0.tar.gz】
(2)解壓文件:【D:\PyInstaller3.0】;
(3)命令提示符進入到PyInstaller3.0文件夾內,輸入命令:python setup.py install
或者:在命令提示符中輸入:pip install pyinstaller
如果已經安裝好,會有下圖提示:
(4)輸入命令:pip list,可以查看python所有安裝的包及版本;
2、將py文件打包成exe文件
(1)在【D:\PyInstaller3.0】目錄下新建文件夾【myexe】,將py文件放入其中;
(2)命令提示符進入到myexe文件夾;
(3)命令提示符輸入:pyinstaller -F 文件名.py;注意空格和大小寫;【例如pyinstaller -F mytest.py】
(4)在文件夾內將生成若干文件,其中exe文件在dist文件夾中。
3、其他參數:輸入命令pyinstaller -h查看。
4、嘗試過的命令:
(1)【pyinstaller -w mytest.py】,生成exe文件在運行時,不會彈出CMD窗口;
(2)【pyinstaller --icon=D:\PyInstaller3.0\myexe\icon\myicon.ico -F mytest.py】,可為exe文件生成圖標。
④ mac 怎麼打包python程序
編寫的程序必須要有GUI(圖形用戶界面),否則程序是不會有顯示的。
具體流程
1. 下載py2app
在此推薦使用Pycharm,下載第三方庫時很方便。具體為File > Default Settings > Prroject Interpreter > 「+」 搜索所需的包即可。若使用其他IDE,可通過終端輸入
pip install py2app
或
easy_install py2app
註:pip的安裝路徑要和interpreter的路徑保持一致,此處可能出現版本不一致的情況
2. 創建setup.py文件
cd /Users/apple/Desktop/function
py2applet --make-setup function.py
在此後,會顯示
Wrote setup.py
但如顯示
-bash: py2applet: command not found
說明未找到py2app中py2applet的位置,需手動輸入,執行以下命令(重新進入終端,否則路徑還在工作區)
sudo find / -name "py2applet" -type f
一般會搜索一段時間,在本人機器上地址為
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/bin/py2applet
這樣的話,最初的命令變為
cd "工程路徑"
"py2applet地址" --make-setup "python文件名"
不出意外的話,會顯示
Wrote setup.py
說明setup文件已建立,其中具體內容會在以後提到。
3. 發布應用
接上一步,輸入
rm -rf build dist
python setup.py py2app
一個簡單的小程序就完成了,」.app」文件會在工程文件目錄下的dist文件夾中。
下為demo中命令行中所有命令
Apples-MacBook-Pro:~ apple$ cd /Users/apple/Desktop/helloworld
Apples-MacBook-Pro:helloworld apple$ /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/bin/py2applet --make-setup helloworld.py
Wrote setup.py
Apples-MacBook-Pro:helloworld apple$ rm -rf build dist
Apples-MacBook-Pro:helloworld apple$ python setup.py py2app
running py2app
.........
.........
Done!
Apples-MacBook-Pro:helloworld apple$
到此為止,已完成小程序的發布。
4. 代碼及結果
import Tkinter as tk
root = tk.Tk()
root.title("hello")
tk.Button(root, text="Helloworld!").pack()
tk.mainloop()
⑤ 使用PyInstaller打包Python程序
PyInstaller是一個用來將Python程序打包成獨立可執行軟體的工具,支持 Windows、Linux 和 Mac OS X。生成的可執行軟體在沒有Python的環境中可以直接運行,方便軟體分發,進一步降低使用成本,提升使用效率。
下面演示如何使用 PyInstaller 將程序打包成Windows下的exe軟體。
使用pip的方式進行安裝,這樣可以自動安裝其他依賴庫。
如果pip還未安裝,請參考我的另一篇文章《 Python pip包管理工具 》
在cmd命令行控制台或者VS Code內置的終端輸入命令行生成應用,首先將當前路徑切換到Python程序所在的路徑(如下示例的SubOcr.py文件在python文件夾下的SubOcr文件夾內),然後輸入生成應用的命令。
命令執行成功後在 I:workpythonSubOcrdist 文件夾下生成了SubOcr文件夾,裡麵包含了SubOcr.exe文件。整個SubOcr文件夾就是一個綠色軟體,隨便移動到任何位置都可運行。
實際上在用pyinstaller命令時會在Python程序的所在路徑生成一個後綴為spec的同名文件,然後根據此文件的配置生成應用,這就是PyInstaller的原理。這樣做的好處是spec保存了生成應用的配置,每次重新生成應用時可以省略指定參數,尤其是指定了其他的資源、程序庫時。我們可以通過以下命令先生成spec文件。
pyi-makespec的命令參數跟pyinstaller的相同,在生成spec文件後可以對其部分選項進行編輯(可以用VS Code或自帶的記事本編輯),添加更多參數,然後再用pyinstaller命令生成應用。
spec文件的主要選項:
上面示例的SubOcr用到了opencc和opencv-python,其中opencc下的數據文件和opencv-python下的dll文件在生成應用時不會自動導入(缺少這些文件應用無法正常使用),因此需要在spec文件中指定路徑。對spec文件的修改如下:
以上便是PyInstaller打包Python程序的全過程,如果在此過程中遇到問題,可以在評論區留言,定當知無不言,言無不盡。