2010-05-18 157 views
38

我爲我的python應用程序使用pip和virtualenv。我想升級到應用程序的新版本而不觸及依賴關係。當我使用pip install -U時,它會嘗試升級所有軟件包,甚至在沒有可用新版本時卸載並重新安裝相同版本的依賴軟件包。使用pip升級軟件包而不升級依賴關係?

我也試過pip install -U --no-deps,但這似乎相當於一次常規安裝而不是升級。是否有組合的標誌可以做我想要的?

+0

很好的問題。我交叉http://stackoverflow.com/questions/2875232/list-python-package-dependencies-without-loading-them - 如果你甚至不能提前列出依賴項,似乎你卡住了。 – denis 2010-05-20 16:17:15

回答

43

我剛剛嘗試了我的virtualenv項目,pip install -U --no-deps mypackage似乎工作得很好。它只是下載mypackage,沒有別的。你的設置是什麼樣的?

+0

當你給一個特定的壓縮包和一個包名稱時,我的行爲有所不同。 Carl Meyer提供了一個有用的解釋:http://groups.google.com/group/python-virtualenv/msg/d702c251a6dc40a5 – 2010-06-10 16:28:31

+0

我強烈建議事後運行'pip check'來檢查是否存在缺失依賴關係的問題。 – Flimm 2017-02-14 14:19:28

4

你說得對。我認爲當我加入--no-deps時,它忽略了卸載現有版本。但我又試了一下,看看有沒有問題:

$ pip install -U --no-deps myproj 
Downloading/unpacking myproj 
    Downloading myproj-1.0-trunk.31072.tar.gz (43Kb): 43Kb downloaded 
    Running setup.py egg_info for package myproj 
Installing collected packages: myproj 
    Found existing installation: myproj 1.0-trunk.31053 
    Uninstalling myproj: 
     Successfully uninstalled myproj 
    Running setup.py install for myproj 
Successfully installed myproj 
Cleaning up... 
25

UPDATE(感謝@益帖的評論):如果你正在使用最新版本的PIP的,然後更新依存關係現在是默認只在必要時行爲,而且你不需要做任何特別的事情!下面的答案概述了舊版pip的步驟(如果您想要便攜,也適用於較新版本)。

如果你真的想不碰的依賴,那麼確實要走的路是

pip install -U --no-deps mypackage 

但我認爲你會通常希望是,除非它的要求不升級的依賴。在這種情況下,你可以使用:

pip install --upgrade --upgrade-strategy only-if-needed mypackage 

這僅更新的要求,如果包裝需要比安裝新版本。

+0

這是現在在PIP新的默認策略:https://github.com/pypa/pip/pull/4500 – Jether 2017-10-22 14:30:14

+0

LoL,我只是盲目地從答案複製命令,它確實安裝了一些['mypackage'](https ://pypi.python.org/pypi/Mypackage/0.1)放到我的python中。 – ImportanceOfBeingErnest 2018-02-02 15:35:49