2014-01-10 78 views
28

使用virtualenv並試圖安裝pyodbc。我可以找到的所有資源聲稱這應該是非常簡單的。畢竟MySQL的基本安裝等,只是做:Python pip無法找到pyodbc

pip install pyodbc 

但是,我看到一個非常奇怪的錯誤。它沒有任何東西(據我所知)與缺失的圖書館有關,在長時間谷歌搜索這類錯誤之後,我根本找不到任何有建設性的東西。

(local-dev)[email protected] ~ $ pip install pyodbc 
Downloading/unpacking pyodbc 
    Could not find any downloads that satisfy the requirement pyodbc 
    Some externally hosted files were ignored (use --allow-external pyodbc to allow). 
Cleaning up... 
No distributions at all found for pyodbc 
Storing debug log for failure in /home/espears/.pip/pip.log 

所以,我試圖用「允許外部的」選項,它並不能幫助:

(local-dev)[email protected] ~ $ pip install --allow-external pyodbc 
You must give at least one requirement to install (see "pip help install") 

但幫助文檔使它看起來,我正確地使用這個選項,例如從運行pip help install的輸出:

Package Index Options: 

... 

    --allow-external <package> Allow the installation of externally hosted files 

這裏的結果在PIP日誌文件:

(local-dev)[email protected] ~ $ cat /home/espears/.pip/pip.log 
Downloading/unpacking pyodbc 
    Getting page https://pypi.python.org/simple/pyodbc/ 
    URLs to search for versions for pyodbc: 
    * https://pypi.python.org/simple/pyodbc/ 
    Analyzing links from page https://pypi.python.org/simple/pyodbc/ 
    Skipping link http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/); not a file 
    Skipping link http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/); not a file 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Not searching http://code.google.com/p/pyodbc/downloads/list (from https://pypi.python.org/simple/pyodbc/) for files because external urls are disallowed. 
    Could not find any downloads that satisfy the requirement pyodbc 
    Some externally hosted files were ignored (use --allow-external pyodbc to allow). 
Cleaning up... 
    Removing temporary dir /home/espears/.virtualenvs/local-dev/build... 
No distributions at all found for pyodbc 
Exception information: 
Traceback (most recent call last): 
    File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/commands/install.py", line 270, in run 
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) 
    File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/req.py", line 1157, in prepare_files 
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade) 
    File "/home/espears/.virtualenvs/local-dev/local/lib/python2.7/site-packages/pip/index.py", line 285, in find_requirement 
    raise DistributionNotFound('No distributions at all found for %s' % req) 
DistributionNotFound: No distributions at all found for pyodbc 

這使得它看起來,如果我可以只拿到--allow-external選項起作用,它會工作,因爲它清楚地看到了獲取pyodbc的常見位置。

但是我很疑惑爲什麼需要這樣做,幾乎所有的安裝pyodbc的引用都不需要爲了啓用外部鏈接而走出困境。我也一直在今天整天安裝很多軟件包,幾乎沒有問題,在任何其他情況下肯定不會遇到這種需求。

我在Ubuntu 12.04上使用Python 2.7.3的pip版本1.5。

+0

/home/espears/.pip/pip.log中的任何其他信息? – sholsapp

+0

另外,什麼版本的點? – sholsapp

+0

查看要修改的帖子。 – ely

回答

43

運行pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc將工作,如果PyPI目錄結構是正確的。

當我最初發布這個答案時,基於pip.log輸出,我認爲該包的網站目錄結構已損壞。您總是可以通過指定包的URL來解決此類問題,如pip install https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pyodbc/pyodbc-3.0.7.zip,不同版本的鏈接描述爲here

+0

非常好。我完全忘了我可以直接使用URL。 – ely

+0

使用URL爲我工作。謝謝! – blockloop

+0

'--allow-all-external'禁用安全。查看其他答案並正確使用'--allow-external'。 – Kashyap

10

我剛剛嘗試安裝pyodbc以及擊中相同的牆。我認爲你和我都遇到的問題是--allow-external也會消耗下一個參數。所以,你真的需要這樣寫:

sudo pip install --allow-external pyodbc pyodbc 

我然後打另一個錯誤約未經覈實,使實際工作對我來說命令是:

sudo pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc 

注意,一旦做對安裝的權限文件阻止普通用戶訪問pyodbc。所以我進去手動調整了所有已安裝軟件包的權限(似乎比找到pyodbc所需的文件更容易)。

cd /usr/local/lib/python2.7/ 
chmod -R o=g dist-packages 

根據EMS的建議,我給Pip bug跟蹤器添加了一個問題。它可以在這裏找到:

https://github.com/pypa/pip/issues/1893

+0

感謝您記錄這一點。您也可以在pip項目頁面上提出問題。我不認爲它打算消耗額外的參數。 – ely

+1

@EMS歡迎您。我可能會這樣做,因爲至少他們的幫助信息肯定需要改進。 –

5

FWIW,比上安裝二進制其他微軟Windows任何東西(Windows安裝)對我來說是累贅在Windows/cygwin的混合環境。

我選擇使用pypyodbc,因爲它是純Python,並且不需要對我的Windows/Linux開發進行任何更改。它可以被視爲almost drop-in replacement for pyodbc,無需編譯,當然可以用pip install pypyodbc輕鬆安裝。

3

有一個 「容易」 的方式在一個virualenv Windows安裝pyodbc使用的easy_install:你的virtualenv

  • 下載最新pyodbc的Windows安裝程序
  • 激活
  • easy_install pyodbc-3.0.7.win32-py2.7.exe

用於pywin32請參閱:How can I use pywin32 with a virtualenv without having to include the host environment's site-packages folder?

+0

我發現這是安裝pip遇到麻煩的任何軟件包的最簡單方法。我最初在嘗試安裝[numpy&scipy](http://stackoverflow.com/a/6753898)時發現它,並且從那以後我嘗試過的每個軟件包都取得了成功。 – Lenwood

3

我成功時

sudo pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc 

安裝。但是,我也需要unixodbc-dev包,以便pyodbc實際編譯。

+0

最好提一下unixodbc-dev。 Thx –

+0

我無法在Ubunt 16.04上安裝'pyodbc',因爲錯誤:'error:command'x86_64-linux-gnu-gcc'failed with exit status 1'。這些命令解決了我的問題:'sudo apt-get install unixodbc-dev && sudo pip install pyodbc'。提及'unixodbc-dev'的Thx! – ChrisO

0

--allow-unverified--allow-external都將包名稱作爲參數。

From pip help install: 
--allow-external <package> Allow the installation of a package even if it 
          is externally hosted 
--allow-unverified <package> Allow the installation of a package even if it 
          is hosted in an insecure and unverifiable way 
  • --allow-external需要一個參數(第的外部,以允許名稱)。
  • --allow-unverified也一樣。
  • 隨着pip install --allow-external pyodbc,您允許外部被叫pyodbc
  • pip install --allow-external pyodbc pydodbc是你需要什麼,第一pyodbc允許外,第二個實際上告訴點子要安裝的軟件包。

    從PIP幫助安裝: --allow-外部允許哪怕是 外部包的安裝託管 --allow-未經確認允許即使 在不安全的託管包的安裝和無法驗證的方式

所以您的使用情況應該是

pip install <pkg> --allow-unverified <pkg> --allow-external <pkg>

或小困惑:

pip install --allow-unverified <pkg> --allow-external <pkg> <pkg>

切勿使用--allow-all-external,當你只想讓一個不ALL。它殺死了安全檢查的全部目的。