摘要:眾所周知的原因,國內訪問國外網站總是不那么順暢,于是就有了鏡像,國內有很多,我用過阿里云的,中科大的,豆瓣的。阿里云的同步的好像不夠及時,中科大的好像很及時,所以我就用中科大的。而通過可以指定當個文件作為包。
pip install的東西從哪里來的?
從PyPI (Python Package Index)來的,官網是: https://pypi.python.org/pypi/
執行pip install terminaltranslator命令的時候,它就會去從官方網站搜terminaltranslator,搜到了就下載壓縮包并解壓安裝,如果沒有搜索到就會報錯。
眾所周知的原因,國內訪問國外網站總是不那么順暢,于是就有了PyPI鏡像,國內有很多,我用過阿里云的,中科大的,豆瓣的。阿里云的同步的好像不夠及時,中科大的好像很及時,所以我就用中科大的。那么,該怎么用這些鏡像呢?
方法1: 給pip加參數-i 后面跟鏡像的url,但是要記住并每次都寫這個url可是一件難事。
方法2: 編寫配置文件~/.pip/pip.conf:
[global] index-url = https://mirrors.ustc.edu.cn/pypi/web/simple
如何把你自己的Python程序發布到PyPI上面去?
首先去官網注冊你的賬號,不能師出無名總得留下你的大名嘛。注冊地址:
https://pypi.python.org/pypi?...
注冊好后編寫你的配置文件~/.pypirc
[distutils] index-servers = pypi pypitest [pypi] repository=https://pypi.python.org/pypi username=Your-Account password=Your-Password [pypitest] repository=https://testpypi.python.org/pypi username=Your-Account password=Your-Password
這里配置了兩個地址,一個是PyPI Live,是正式發布Python包的;另一個是PytPI Test 是用來正式發布之前驗證你的包是否正常。
準備好你的Python包
通常你的代碼目錄結構如下:
root-dir/ # 你的代碼的根目錄
setup.py setup.cfg LICENSE.txt README.md mypackage/ __init__.py foo.py bar.py baz.py
其中的setup.py就是安裝包的文件,格式如下:
from distutils.core import setup setup( name = "mypackage", packages = ["mypackage"], # 跟上面代碼目錄下面的包名一致 version = "0.1", description = "A setup test package", author = "veelion", author_email = "veelion@gmail.com", url = "https://github.com/veelion/mypackage", # 指向 github 倉庫的URL keywords = ["testing", "logging", "example"], # 一些關鍵詞 classifiers = [], )
setup可以從兩個包里面調來使用,一個是上面用的distutils,另外一個是setuptools,如:
from setuptools import setup
這兩個包功能基本一樣,而setuptools支持wheel(未來包管理的趨勢),所以一般用setuptools更好一些。再多說兩句wheel,它是用來準備替換老的egg的,其中很好的一個優點是“二進制格式發布”,當包內含有C/C++寫的擴展的時候可以把.so/.dll等二進制庫打包進去,實現“一次編譯,到處使用”的目標。省的用戶編譯時需要解決一堆依賴問題。
但是setuptools好像是不支持單文件包,即你的包只是一個.py文件而非上面說的是一個帶__init__.py我目錄。而distutils通過py_modules可以指定當個文件作為包。
上面說的是用setup.py管理Python包讓其他人import用,而非在命令行下指向。
而terminaltranslator 是一個命令行工具,可以在setup.py里面不指定package而是指定scripts來把相關文件安裝到bin目錄下:
if __name__ == "__main__": from setuptools import setup setup( name="TerminalTranslator", version="0.8", author="Veelion chong", author_email="veelion@gmail.com", license="MIT", url="https://github.com/veelion/tt", description=("Linux terminal translating tool implemented in Python"), scripts=["t", "tt", "terminaltranslator.py"], )
這里還用到一個小tip,把terminaltranslator.py 鏈接為t和tt兩個別名,這樣命令行下使用起來更方便。 不過,好像Windows下不支持Linux的軟鏈接,t和tt可能在Windows下出問題
發布到PyPI
首先,打包生成壓縮包
python setup.py sdist python setup.py bdist_wheel (distutils不支持這個wheel選項)
上傳到PyPI:
python setup.py register #注冊你的包,如果出現與已有包重名則報錯
python setup.py upload
更新:在python3下面,python setup.py upload 已經無效,官方推薦用 twine 上傳到pypi。
或者可以用twine (無需register,直接upload)
twine register dist/xxx.gz twine register dist/xxx.whl twine upload dist/*
文章來源于:猿人學網站的python教程。
版權申明:若沒有特殊說明,文章皆是猿人學原創,沒有猿人學授權,請勿以任何形式轉載。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43728.html
摘要:準備注冊賬號很顯然地要在上注冊一個賬號。最終的代碼結構打包上傳在的同級目錄下運行以下命令。大功告成之后我們就可以在里搜索到自己的庫了,當然也可以直接通過安裝。 背景 最近興趣使然寫了幾個Python庫,也發布到了Pypi上,雖然沒什么人下載,但自己在其他機器上用著也會很方便。這里我向大家介紹一下如何在Pypi上發表自己的Python庫。 準備 注冊賬號 很顯然地要在Pypi上注冊一個...
摘要:不幸的是,在軟件包管理十分混亂,至少歷史上十分混亂。的最大改進是將函數的參數單獨放到一個的文件中這些成為包的元數據。基于的版本號管理。的版本推導這里重點說明一下基于的版本號管理這個功能。開發版本號的形式如下。 為什么寫這個系列 OpenStack是目前我所知的最大最復雜的基于Python項目。整個OpenStack項目包含了數十個主要的子項目,每個子項目所用到的庫也不盡相同。因此,對于...
摘要:本文主題如下編寫一個包源代碼,但不是本文的重點。發布包,發布的包可以有多種類型。查看為了生成和發布包,必須編寫文件,編寫該文件必須依賴于包,這個包本身也是一個包。編寫測試文件然后運行配置為了發布包,必須在注冊一個用戶,注冊郵箱需要驗證。 本文主題如下: 編寫一個包(Python 源代碼),但不是本文的重點。 編譯包,觀察編譯后的文件。 發布包,發布的包可以有多種類型。 如何在 Pypi...
摘要:前言安裝,因為軟件版本上的需求所以考慮將升級至,加上生產環境還是以為主,互聯網自動化運維平臺大多數也推薦以來操作,選擇還是也沒有定論,找到適合的搭配即可。 前言 CentOS 6.8 安裝 Python 2.7.13,因為軟件版本上的需求所以考慮將 Python 升級至 2.7.13,加上生產環境還是以 RHEL 6 為主,互聯網自動化運維平臺大多數也推薦以Python 2.7.x +...
摘要:淺析參數說明對于所有列表里提到的純模塊做處理需要在腳本里有一個包名到目錄的映射。闡明包名到目錄的映射,見鍵代表了包的名字,空的包名則代表不在任何包中的頂層包。最終會在下生成可執行文件,調用制定的函數實例分析 python setup.py 淺析 setuptools.setup() 參數說明 packages 對于所有 packages 列表里提到的純 Python 模塊做處理 需要...
閱讀 1750·2021-09-28 09:43
閱讀 1111·2021-09-23 11:22
閱讀 2707·2021-09-14 18:05
閱讀 1823·2019-08-30 15:52
閱讀 2812·2019-08-30 10:55
閱讀 2007·2019-08-29 16:58
閱讀 1323·2019-08-29 16:37
閱讀 3031·2019-08-29 16:25