web-dev-qa-db-fra.com

Python pip incapable de localiser pyodbc

Utiliser virtualenv et essayer d'installer pyodbc. Toutes les ressources que je peux trouver prétendent que cela devrait être extrêmement simple. Après toutes les installations de base de MySQL, etc., faites simplement:

pip install pyodbc

Cependant, je vois une erreur très étrange. Pour autant que je sache, cela n'a rien à voir avec les bibliothèques manquantes, et après avoir recherché ce type d'erreur pendant longtemps, je ne trouve rien de constructif à ce sujet.

(local-dev)espears@espears-w ~ $ 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

J'ai donc essayé avec l'option "allow-external" et ça n'aide pas:

(local-dev)espears@espears-w ~ $ pip install --allow-external pyodbc
You must give at least one requirement to install (see "pip help install")

Mais la documentation d'aide donne l'impression que j'utilise correctement cette option, par exemple à partir de la sortie de l'exécution pip help install:

Package Index Options:

...

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

Voici le résultat dans le fichier journal PIP:

(local-dev)espears@espears-w ~ $ 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

Il semble que si je peux simplement obtenir le --allow-external option pour fonctionner, cela fonctionnera car il voit clairement l'emplacement commun pour obtenir pyodbc.

Mais je suis perplexe quant à la raison pour laquelle cela est nécessaire, alors que pratiquement toutes les références à l'installation de pyodbc n'ont pas besoin d'être mises de côté pour activer les liens externes. J'ai également installé de nombreux packages toute la journée aujourd'hui, avec peu de problèmes et ne rencontrant certainement pas ce allow-external besoin dans tous les autres cas.

J'utilise pip version 1.5 avec Python 2.7.3 sur Ubuntu 12.04.

29
ely

Fonctionnement pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc fonctionnera si la structure du répertoire PyPI est correcte.

Sur la base de la sortie pip.log lorsque j'ai initialement publié cette réponse, je pense que la structure de répertoire du site Web du package a été rompue. Vous pouvez toujours contourner ce type de problème en spécifiant l'URL du package comme pip install https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pyodbc/pyodbc-3.0.7.Zip, les liens pour les différentes versions sont décrits ici .

44
sholsapp

J'ai également essayé d'installer pyodbc et j'ai heurté le même mur. Je pense que le problème que vous et moi avons touché est que --allow-external consomme également l'argument suivant. Vous devez donc réellement écrire:

Sudo pip install --allow-external pyodbc pyodbc

J'ai ensuite rencontré une autre erreur concernant les sources non vérifiées, de sorte que la commande qui a réellement fonctionné pour moi était:

Sudo pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc

Notez qu'une fois cela fait, les autorisations sur les fichiers installés ont empêché les utilisateurs normaux d'accéder à pyodbc. J'ai donc modifié manuellement les autorisations sur tous les packages installés (cela semblait plus facile que de trouver uniquement les fichiers nécessaires à pyodbc).

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

Selon la suggestion de EMS j'ai ajouté un problème au tracker de bogue Pip. Il peut être trouvé à:

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

10
Bowie Owens

FWIW, sur ms windows autre chose que l'installation du binaire (installation de windows) pour moi était encombrant dans un environnement hybride windows/cygwin.

J'ai choisi d'utiliser pypyodbc car c'est pur python et je n'ai pas eu besoin de changements pour mon développement windows/linux. Il peut être vu comme un presque drop-in remplacement de pyodbc sans compilation nécessaire, et bien sûr peut être installé facilement avec pip install pypyodbc.

5
joefromct

Il existe un moyen "plus simple" d'installer pyodbc sur Windows dans un virualenv en utilisant easy_install :

  • télécharger le dernier programme d'installation de pyodbc pour windows
  • activer votre virtualenv
  • easy_install pyodbc-3.0.7.win32-py2.7.exe

comme utilisé pour pywin32 voir: Comment puis-je utiliser pywin32 avec un virtualenv sans avoir à inclure le dossier des packages de site de l'environnement hôte?

4
jvh

J'ai eu du succès lors de l'installation avec

Sudo pip install --allow-external pyodbc --allow-unverified pyodbc pyodbc

Cependant, j'avais également besoin du unixodbc-dev package pour que pyodbc se compile réellement.

3
Carl Ekerot

Tous les deux --allow-unverified et --allow-external prend le nom du package comme argument.

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 nécessite un argument (nom du externe à autoriser).
  • De même pour --allow-unverified aussi .
  • Avec pip install --allow-external pyodbc, vous autorisez l'externe appelé pyodbc
  • pip install --allow-external pyodbc pydodbc est ce dont vous avez besoin, d'abord pyodbc permet à cet externe, le second indique à pip quel paquet installer.

    A partir de pip help install: --allow-external Autorise l'installation d'un package même s'il est hébergé en externe --allow-unverified Autorise l'installation d'un package même s'il est hébergé de manière non sécurisée et invérifiable

Votre utilisation doit donc être

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

ou le peu déroutant:

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

NE PAS utiliser --allow-all-external quand vous voulez juste en autoriser une et non [~ # ~] tout [~ # ~] . Cela tue tout le but de faire le contrôle de sécurité.

0
Kashyap