[英]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
仍然成功安裝軟件包並且甚至沒有抱怨時,源顯然是本地的。
就我而言,真正令人困惑的部分是pip
在pypi上找到了較新版本,報告了它們,然后繼續並重新安裝了舊版本...... 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.gz
: pip 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
是否可以看到。-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.