簡體   English   中英

為什么 pip 安裝的是舊版本的 package?

[英]Why is pip installing an old version of my package?

我剛剛將我的 package 的新版本上傳到 PyPi (1.2.1.0-r4):我可以下載 egg 文件並使用 easy_install 安裝它,並且版本正確檢查。 但是當我嘗試使用 pip 安裝時,它會安裝 1.1.0.0 版本。 即使我使用pip install -Iv tome==1.2.1.0-r4明確指定 pip 的版本,我也會收到此消息: Requested tome==1.2.1.0-r4, but installing version 1.1.0.0 ,明白為什么。

我仔細檢查了parse_version並確認 1.2.1 上的版本字符串大於 1.1.0 上的版本字符串,如下所示:

>>> from pkg_resources import parse_version as pv
>>> pv('1.1.0.0') < pv('1.2.1.0-r4')
True
>>>

那么知道為什么它選擇安裝 1.1.0 嗎?

這是一個很好的問題。 我花了很長時間才弄明白。 這是對我有用的解決方案:

顯然,如果pip可以找到包的本地版本,則pip會更喜歡本地版本而不是遠程版本。 我什至斷開了我的計算機與互聯網的連接並再次嘗試 - 當pip仍然成功安裝軟件包並且甚至沒有抱怨時,源顯然是本地的。

就我而言,真正令人困惑的部分是pippypi上找到了較新版本,報告了它們,然后繼續並重新安裝了舊版本...... arggh。 此外,它沒有告訴我它在做什么,以及為什么。

那么我是如何解決這個問題的呢?

您可以使用-v標志讓pip提供詳細的輸出......但一個是不夠的。 我對幫助進行了 RTFM,其中說您可以多次執行-v ,最多 3 次,以獲得更詳細的輸出。 所以我做了:

pip install -vvv <my_package>

然后我查看了輸出。 有一句話引起了我的注意:

/tmp/pip-build-root/ 中的源版本為 0.0.11,滿足 <my_package> 要求

我刪除了那個目錄,之后pip從 pypi 安裝了最新版本。

嘗試使用以下命令再次強制下載軟件包:

pip install --no-cache-dir --upgrade <package>

感謝Marcus Smith作為 pip 的維護者做了驚人的工作,這個問題在 2013 年 7 月 23 日發布的 pip 1.4 版中得到了修復。

此版本變更日志中的相關信息

修復了許多與清理和不重用構建目錄相關的問題(#413、#709、#634、#602 和 #939)。 (拉#865、#948)

我在這里發現 pip 中存在一個已知錯誤,如果存在帶有解壓源的構建目錄,它不會檢查版本。 我已經在我的麻煩包上檢查過這個,在從構建目錄中刪除它的源代碼后,pip 安裝了所需的版本。

如果您使用的是某些分發包(例如 Ubuntu python-pip)附帶的pip版本,則可能需要安裝更新的pip版本:

更新pip到最新版本:

sudo pip install -U pip

在“virtualenv”的情況下,跳過“sudo”:

pip install -U pip

如果您的 shell 報告類似-bash: /usr/bin/pip: No such file or directory after pip update 之類的內容,則可能需要以下命令:

hash -d pip

現在像往常一樣安裝你的包:

pip install -U foo

要么

pip install foo==package.version.here

將 pika 0.9.5 更新到 0.9.8 時遇到了同樣的問題。 唯一可行的方法是從 tarball pip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gzpip install https://pypi.python.org/packages/source/p/pika/pika-0.9.8.tar.gz

就我而言,我必須刪除主目錄中的.pip文件夾,然后才能獲得多個庫的更高版本。 請注意,這是在 linux 上。

pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
virtualenv --version
15.1.0

我發現如果您使用微版本,pip 似乎無法識別它們。 例如,我們無法升級 1.9.9.1 版本。

在我的情況下,使用的 python 版本 (3.4) 不滿足 Django 2.1 依賴項要求 (python >= 3.5)。

就我而言,我正在從 Artifactory 安裝一個 .tar.gz 包,我對其進行了大量更新。 為了覆蓋我緩存的 Python 文件並始終獲取/安裝我能夠運行的最新文件:

pip install --no-cache-dir --force-reinstall <path/to/tar.gz>

您應該會看到重新下載任何必要的文件並安裝它們,而不是使用本地緩存。

在我的情況下,有人出版了最新版本python2一包的,因此試圖pip3 install它抓住的是已經建成與python3舊版本。

調試時要檢查的方便事項:

  • 如果pip install聲稱找不到版本,看看pip search是否可以看到。
  • 看看 pypi 存儲庫上的“下載文件”部分——文件名可能表明出了什么問題(在我的情況下,我看到-py2-那里很清楚)。
  • 正如其他人所建議的那樣,嘗試運行pip install --no-cache-dir以防 pip 不費心詢問互聯網,因為它已經在本地有了您的答案。

我在 PyCharm 的 Git 選項卡下隱藏了未版本控制的文件,這些文件是通過pip install . 即使我在其他任何地方都沒有看到這些文件。

找了好久才找到,貼出來希望能幫到別人。

以防萬一其他人在升級火炬文本(或可能是任何其他torch庫)時遇到麻煩:

盡管https://pypi.org/project/torchtext/聲明您可以運行pip install torchtext我必須通過指定--find-links aka -f來安裝它--find-links torch

pip install torchtext===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

令我惱火的是 PyCharm 將我指向新版本,但在嘗試升級到它時找不到它。 我猜想 PyCharm 使用自己的機制來發現新版本。 然后,當在--find-links調用pip時,它沒有找到沒有--find-links選項的新版本。

如果您需要 package 的路徑,請執行pip -v list 使用 pip -e 時的示例見相關帖子為什么我的 python 庫的 package 的舊版本是使用 Z682AD1C2A456D8Z 自行安裝的?

10 年過去了, pip仍然無法按預期工作。

我現在浪費了幾個小時的頭撞牆試圖找出為什么pip不會安裝我的 package 的開發版本。 In my case, there are versions 0.0.4 and 0.0.5.dev1 in a private gitlab.com package registry (hence the --extra-index-url argument below), but I believe that's not relevant to the problem.

按照這個頁面上的很多建議,我在一個很遠的文件夾中創建了一個測試venv,清除pip緩存,卸載有問題的package等,首先排除最常見的問題:

$ pip cache purge && \
  pip uninstall --yes my-package && \
  pip install --extra-index-url "https://_:${GITLAB_PASSWORD_TOOLS_VAULTTOOLS}@gitlab.com/api/v4/projects/<project-id>/packages/pypi/simple" \
              --no-cache-dir  \
              --pre           \
              --upgrade my-package

output(使用空行分隔 output 用於命令):

WARNING: No matching packages
Files removed: 0

Found existing installation: my-package 0.0.4
Uninstalling my-package-0.0.4:
  Successfully uninstalled my-package-0.0.4

Looking in indexes: https://pypi.org/simple, https://_:****@gitlab.com/api/v4/projects/<project-id>/packages/pypi/simple
Collecting my-package
  Downloading https://gitlab.com/api/v4/projects/<project-id>/packages/pypi/files/f07 ... 397/my_package-0.0.5.dev1-py3-none-any.whl (16 kB)
  Downloading https://gitlab.com/api/v4/projects/<project-id>/packages/pypi/files/775 ... 70e/my_package-0.0.4-py3-none-any.whl (16 kB)
    ...
Successfully installed my-package-0.0.4

所以pip確實看到了 dev package 版本,但仍然選擇了較早的版本。

為了弄清楚發生了什么,我發布了一個0.0.5版本:錯誤仍然存在, pip看到所有三個版本,但仍然安裝0.0.4

在進一步的、越來越絕望的嘗試中,我從 gitlab.com package 注冊表中刪除了0.0.5*之前的所有版本。

只是現在pip才會費心實際顯示一些有用的信息:

$ (same command as above)
    ... (similar output as above) ...
ERROR: Cannot install my-package==0.0.5 and my-package==0.0.5.dev1 because these package versions have conflicting dependencies.

The conflict is caused by:
    my-package 0.0.5 depends on my-other-package<0.2.5 and >=0.2.4
    my-package 0.0.5.dev1 depends on my-other-package<0.2.5 and >=0.2.4

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

好的,所以我的 package 依賴項有問題。 謝謝你讓我知道。

說真的 - 我使用各種pip... -vvv和/或固定版本(例如my-package==0.0.5.dev1 )努力了幾個小時 - 但我沒有設法得到任何有用的 output pip - 直到我從我的 package 注冊表中擦除整個歷史記錄。

希望這至少可以幫助處於相同情況的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM