[英]Avoiding circular dependency when overloading operator __add__ in Python
[英]Avoiding dependency confusion in python
在我在工作場所工作的 python 項目中,我們使用標准需求文件安裝來自 PyPI 的一些包和來自 Gemfury 的一些私人公司包。
看完這篇文章: https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610 。
我們的需求文件看起來像:
--index-url <OUR_GEMFURY_URL>
--extra-index-url https://pypi.python.org/simple
aiohttp==3.7.1
simplejson==3.17.1
<our-package>==1.0.0
<our-other-package>==1.2.0
我嘗試閱讀一些 pip 的文檔,但我無法完全理解它如何選擇從哪里下載 package。 例如,如果有人將惡意版本 1.0.0 上傳到 pypi-prod 會發生什么 - pip 怎么知道要使用哪個包? 有沒有辦法為特定的 package 指定 pip 以僅在 --index-url 中搜索它?
如何防止代碼中的依賴混淆? 謝謝您的幫助!
文章提到算法 pip 使用:
因此,如果您的腳本需要<our-other-package>>=1.2.0
,如果它的版本高於您打算安裝的版本,您可以從公共 pypi 服務器獲取一些 mailicios package。
文章中提到的直接解決方案是刪除--extra-index-url
如果package 1.0
是內部或外部 package 並且存在於私有 pypi 服務器中,它將從那里下載。
外部包將通過內部 pypi 服務器從公共 pypi 服務器下載,內部 pypi 服務器將緩存它們以供將來使用。
我還建議在 requirements.txt 中有明確的版本,這樣您就可以知道您獲得的版本並通過增加版本來進行有意識的升級。
總結指南(絕不是詳盡的並防止所有可能的安全漏洞)
pip.conf
、 requirements.txt
和自動化腳本中刪除--extra-index-url https://pypi.python.org/simple
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.