2017-10-16 41 views
5

J'essaye de résoudre une différence de comportement entre deux installations python qui sont généralement déterministes et qui ont les mêmes paquets python pip installés.Peut pip faire la liste de ses roues binaires?

Je suspecte différents fichiers .so. Y a-t-il un pourquoi voir quels binaires ont été installés, et pour quelles architectures?

Mise à jour -

% pip show Name: scipy Version: 1.0.0rc1 Summary: SciPy: Scientific Library for Python Home-page: https://www.scipy.org Author: SciPy Developers Author-email: [email protected] License: BSD Location: /usr/local/lib/python2.7/dist-packages Requires: numpy

Le paquet ci-dessus dépend des choses comme libopenblas qui doivent être compilés. Je ne suis pas sûr si pip utilisé l'installation du système, ou BLAS compilé au cours d'une installation pip, ou utilisé comme version précompilée de BLAS pour un i386, ou i686 - qui sait.

Le cas ci-dessus je:

/usr/local/lib/python2.7/dist-packages/scipy/.libs/libopenblasp-r0-39a31c03.2.18.so 

Je voudrais voir quel paquet ont des différences dans leurs .sos installés dans les systèmes de différence.

+0

utilisez le code python: utilisez la commande "liste pip" (attraper son sortie), puis mettez chacun de ce package_name sur "pip show" commande avec "pour", pour afficher leurs informations. – DRPK

+0

'pip list' et' pip show 'sont la manière la plus simple de vérifier rapidement que @DRPK mentionne, mais si vous creusez dans des fichiers individuels, vous pouvez voir où sont installés vos paquets de site pour chaque instance de python. python IDLE ou de CLI puis 'site d'importation' site.getsitepackages() 'qui retournera alors quelque chose comme' [/usr/lib64/python2.7/site-packages ',' /usr/lib/python2.7/ paquets de site ','/usr/lib/site-python '] 'où vous pouvez vérifier les fichiers sont les mêmes, juste au cas où quelque chose de bizarre se produisait à l'un et pas l'autre – stephen

Répondre

4

L'information est là, mais vous devrez fouiller dans les sous-répertoires dist-info et/ou egg-info pour le trouver.

  • Les distributions binaires incluent un fichier RECORD dans leur sous-répertoire de métadonnées.
  • Les distributions sources incluent un fichier installed-files.txt dans leur sous-répertoire de métadonnées.

Les fichiers RECORD sont des lignes de csv (chemin, hachage, taille) comme indiqué dans PEP-376. Le plus ancien installed-files.txt d'un oeuf est juste les noms de fichiers, et vous devrez stat ces fichiers manuellement. Par exemple, j'ai les distributions source et binaire de mon paquet copyingmock disponible sur PyPI. Avec la distribution binaire installé (pip install copyingmock):

$ pip show --files copyingmock 
Name: copyingmock 
Version: 0.1 
Summary: A subclass of MagicMock that copies the arguments 
Home-page: https://github.com/wimglenn/copyingmock 
Author: Wim Glenn 
Author-email: [email protected] 
License: MIT 
Location: /tmp/blah/venv/lib/python3.6/site-packages 
Requires: 
Files: 
    __pycache__/copyingmock.cpython-36.pyc 
    copyingmock-0.1.dist-info/DESCRIPTION.rst 
    copyingmock-0.1.dist-info/INSTALLER 
    copyingmock-0.1.dist-info/LICENSE.txt 
    copyingmock-0.1.dist-info/METADATA 
    copyingmock-0.1.dist-info/RECORD 
    copyingmock-0.1.dist-info/WHEEL 
    copyingmock-0.1.dist-info/metadata.json 
    copyingmock-0.1.dist-info/top_level.txt 
    copyingmock.py 
$ cat venv/lib/python3.6/site-packages/copyingmock-0.1.dist-info/RECORD 
copyingmock.py,sha256=DoLAuaS7KqGT87BIlD93G1M7q9bNWgHYu1m1TZP1D1g,345 
copyingmock-0.1.dist-info/DESCRIPTION.rst,sha256=L_0CS_8XNYgAVfq3tj3GZEYg_9vML9nDP-FUU37GIbs,1541 
copyingmock-0.1.dist-info/LICENSE.txt,sha256=sDdX5cBRRpk3rmZ8hbYEfAUIYRdDqrlXmChOUkqf62o,1066 
copyingmock-0.1.dist-info/METADATA,sha256=bKJ5RXwvj0rGrg22p4K91WiJoLM5MqLHYqlpWYWUhPU,2031 
copyingmock-0.1.dist-info/RECORD,, 
copyingmock-0.1.dist-info/WHEEL,sha256=5wvfB7GvgZAbKBSE9uX9Zbi6LCL-_KgezgHblXhCRnM,113 
copyingmock-0.1.dist-info/metadata.json,sha256=SLtuqq4tUGr0A2h4hQnZEdPIm_4MrvcunLzP-_1I7Qc,677 
copyingmock-0.1.dist-info/top_level.txt,sha256=X3FsY_0npOxR5rKvOJ-b2rdiNfSiIivwVKN4JgY7cac,12 
copyingmock-0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 
__pycache__/copyingmock.cpython-36.pyc,, 

ensuite forcer à réinstaller la distribution source (pip uninstall copyingmock puis pip install --no-binary=copyingmock copyingmock):

$ pip show --files copyingmock 
Name: copyingmock 
Version: 0.1 
Summary: A subclass of MagicMock that copies the arguments 
Home-page: https://github.com/wimglenn/copyingmock 
Author: Wim Glenn 
Author-email: [email protected] 
License: MIT 
Location: /tmp/blah/venv/lib/python3.6/site-packages 
Requires: 
Files: 
    __pycache__/copyingmock.cpython-36.pyc 
    copyingmock-0.1-py3.6.egg-info/PKG-INFO 
    copyingmock-0.1-py3.6.egg-info/SOURCES.txt 
    copyingmock-0.1-py3.6.egg-info/dependency_links.txt 
    copyingmock-0.1-py3.6.egg-info/top_level.txt 
    copyingmock.py 
$ cat venv/lib/python3.6/site-packages/copyingmock-0.1-py3.6.egg-info/installed-files.txt 
../copyingmock.py 
../__pycache__/copyingmock.cpython-36.pyc 
dependency_links.txt 
PKG-INFO 
top_level.txt 
SOURCES.txt 
+0

Merci. '' 'pip show --files scipy | grep -e \\. so''' me permet de trouver le .sos pour un seul paquet, bien qu'il soit un peu court sur des informations telles que l'architecture pour laquelle il a été compilé, etc ... qui pourrait montrer des différences. Je peux essayer de vérifier les fichiers .so, mais je soupçonne et où compilé avec des informations de débogage avec le rendre inutile. – user48956