摘要:本文原文是在開始之前,我要聲明我們要解釋的是技巧。不是最佳實踐,并且在至少一種情況下,它是不可取的。技巧這些技巧使得我的包管理更容易一點。我很確定我的一些讀者使用這個技巧會有一個嚴重的問題。盡管如此,因為這些技巧,我喜歡讓事情簡單明了。
本文原文是 setup.py tricks
在開始之前,我要聲明我們要解釋的是‘技巧’。不是最佳實踐,并且在至少一種情況下,它是不可取的。
說到不明智的做法,在某時我將寫一篇“setup.py 陷阱”的博客文章,我相信你應該絕不會在 setup.py 模塊做的事情。
技巧這些技巧使得我的 Python 包管理更容易一點。在你試圖實現它們之前,我建議你最少有創建新包的基礎經驗。有兩種方式可以學習到 Python 包的知識,一個是 New Library Sprint(適合初學者),另外一個是 Python Packaging User Guide(更高級)。
"python setup.py publish"這是一切開始的地方。某天我看到了一些 Tom Christie 的代碼,并發現了 Django Rest 框架的 setup.py 模塊的 python setup.py publish 命令。它看起來像這樣:
# setup.py import os import sys # I"ll discuss version tricks in a future blog post. version = "42.0.0" if sys.argv[-1] == "publish": os.system("python setup.py sdist upload") os.system("python setup.py bdist_wheel upload") print("You probably want to also tag the version now:") print(" git tag -a %s -m "version %s"" % (version, version)) print(" git push --tags") sys.exit() # Below this point is the rest of the setup() function
了不起的是使用的這個技術我沒有發現有稍微隱秘的 python setup.py sdist upload 命令,或者實際上隱秘的是 python setup.py bdist_wheel upload。當我把其中一個包 push 到 PyPI 上去的時候,我僅僅需要鍵入:
$ python setup.py publish
非常簡單。
"python setup.py tag"Tom Christie 的 python setup.py publish 命令的問題是它強迫我打印輸出 git tag 命令。好吧,讓我們說實話吧,它強迫我復制/粘貼我的輸出到我的屏幕上。因此,對于我自己,我‘創造’了 python setup.py tag 命令:
# setup.py if sys.argv[-1] == "tag": os.system("git tag -a %s -m "version %s"" % (version, version)) os.system("git push --tags") sys.exit()
相當漂亮,是不是?現在我不需要記住一些隱秘的 git 命令。然后我獲得了更短的 python setup.py publish 命令:
if sys.argv[-1] == "publish": os.system("python setup.py sdist upload") os.system("python setup.py bdist_wheel upload") sys.exit()
當我需要一個版本發布,我提交我的代碼然后鍵入:
$ python setup.py publish $ python setup.py tag
為什么我部組合這些命令?好吧,你不會支持 put 東西像 "RC1" 或 "-alpha" 到你的 PyPI 版本名字。通過分離這些命令,我可以更細粒度的控制包發布。我鼓勵在 git tags 中對 alpha,beta,和 候選版本分類,而不是正式 PyPI 版本。
"python setup.py test"我很確定我的一些讀者使用這個技巧會有一個嚴重的問題。實際上,依賴于管理 Python 包架構的響應,它可能會被移動到我即將出版的“陷阱”的博客文章。
我喜歡 py.test。我已經寫了一遍關于使用 py.test 的博客,我嘗試在任何地方使用它。我們應該如何配合進 python setup.py test。恰好在那個時刻,使得我舒服的是使用 py.test 在 setup.py 中加入指定的類。
幸運的是,有另外一種方式:
if sys.argv[-1] == "test": test_requirements = [ "pytest", "flake8", "coverage" ] try: modules = map(__import__, test_requirements) except ImportError as e: err_msg = e.message.replace("No module named ", "") msg = "%s is not installed. Install your test requirments." % err_msg raise ImportError(msg) os.system("py.test") sys.exit()
這意味著我用一個簡單的添加代碼使用了 py.test 和 python setup.py test 。
$ python setup.py test
理論上,可以運行 pip install 安裝缺失的包,或者從一個 requirements 文件中調用它們。盡管如此,因為這些技巧,我喜歡讓事情簡單明了。如果我得到足夠明確的結果,我將更新這個示例來包含調用 pip 來安裝缺失的 requirements。
注意,這并不意味著我不使用 tox,我使用 tox 來調用我 python setup.py test 的版本。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37485.html
摘要:前言安裝,因為軟件版本上的需求所以考慮將升級至,加上生產環境還是以為主,互聯網自動化運維平臺大多數也推薦以來操作,選擇還是也沒有定論,找到適合的搭配即可。 前言 CentOS 6.8 安裝 Python 2.7.13,因為軟件版本上的需求所以考慮將 Python 升級至 2.7.13,加上生產環境還是以 RHEL 6 為主,互聯網自動化運維平臺大多數也推薦以Python 2.7.x +...
摘要:其中用到編程等,還需要花更多的精力去深入學習,當每項技能都能掌握到一定深度,才能稱為一個完整的知識體系。 都有哪些種類的配置文件 pytest.ini:pytes...
摘要:淺析參數說明對于所有列表里提到的純模塊做處理需要在腳本里有一個包名到目錄的映射。闡明包名到目錄的映射,見鍵代表了包的名字,空的包名則代表不在任何包中的頂層包。最終會在下生成可執行文件,調用制定的函數實例分析 python setup.py 淺析 setuptools.setup() 參數說明 packages 對于所有 packages 列表里提到的純 Python 模塊做處理 需要...
摘要:可以通過命令自動生成和安裝,如下所示生成文件安裝依賴完結啦 前言如果輕松讓別人使用你的Python項目?python setup.py sdist打個包,讓他們python setup.py install使用吧!正文首先今天要涉及到以下命令:--python setup.py build # 僅編譯不安裝 --...
摘要:本文主題如下編寫一個包源代碼,但不是本文的重點。發布包,發布的包可以有多種類型。查看為了生成和發布包,必須編寫文件,編寫該文件必須依賴于包,這個包本身也是一個包。編寫測試文件然后運行配置為了發布包,必須在注冊一個用戶,注冊郵箱需要驗證。 本文主題如下: 編寫一個包(Python 源代碼),但不是本文的重點。 編譯包,觀察編譯后的文件。 發布包,發布的包可以有多種類型。 如何在 Pypi...
閱讀 3159·2021-11-22 14:45
閱讀 3311·2019-08-29 13:11
閱讀 2310·2019-08-29 12:31
閱讀 928·2019-08-29 11:21
閱讀 2999·2019-08-29 11:09
閱讀 3625·2019-08-28 18:11
閱讀 1427·2019-08-26 13:58
閱讀 1280·2019-08-26 13:27