Python — почему версия библиотеки из pip freeze будет отличаться от того, когда я ее запускаю?

#python #pip #anaconda #conda

#python #pip #anaconda #conda

Вопрос:

Я использую conda и pip для управления своими пакетами.

В моем environment.yml у меня есть следующее

   - LOTS OF PACKAGES
  - ...
  - ...
  - pip:
    - pyarrow==0.16.0
  

Итак, pyarrow должна быть определенной версией — 0.16.

Я должен активировать в этой среде. И когда я выполняю pip freeze или pip show, версия согласуется. Предполагается, что она равна 0.16

 (CONDA) $ pip show pyarrow
Name: pyarrow
Version: 0.16.0
Summary: Python library for Apache Arrow
Home-page: https://arrow.apache.org/
Author: None
Author-email: None
License: Apache License, Version 2.0
Location: /home/<USRER>/anaconda3/envs/CONDA/lib/python3.6/site-packages
Requires: numpy, six

  

Но когда я запускаю python, импортирую библиотеку и пытаюсь получить версию, это другая версия.

 (CONDA) $ python   
Python 3.6.6 |Anaconda, Inc.| (default, Oct  9 2018, 12:34:16) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyarrow
>>> pyarrow.__version__
'0.12.0'
>>> pyarrow.__file__
'/home/<USER>/anaconda3/envs/CONDA/lib/python3.6/site-packages/pyarrow/__init__.py'
  

Я не понимаю, как это возможно. Я ожидал бы, что версия согласится, но по какой-то причине python настаивает на том, что pyarrow — это другая версия.

Теперь я подозреваю, что вся моя среда conda плохая. Разве версия, которую я получаю в python, не должна соответствовать pip freeze?

Комментарии:

1. Это все еще происходит, если вы устанавливаете пакет pyarrow отдельно в env с помощью pip вместо установки через файл yml?

2. да, я вручную установил pip в своей среде conda, и у нее все еще есть старая версия, когда я действительно запускаю python.

3. Является ли pyarrow частью списка conda также в файле yml или только в списке pip?

4. @sinoroc Это должно быть, так как pip show включает правильное местоположение.

5. @user3240688 Вам нужно устанавливать pyarrow через pip? Это не совсем решение текущей проблемы, но, похоже, оно доступно в виде пакета Conda ( ссылка ).

Ответ №1:

pyarrow делает некоторые забавные вещи с __version__ переменной. Она генерируется с помощью setuptools-scm.

Так что, возможно, установленная вами версия conda по какой-то причине сломана. Возможно, попробуйте установить ее вручную, клонировав ее и установив с помощью pip из клонированной папки, не проходя через conda , и посмотрите, получите ли вы другой результат.

Я верю, что вы можете сделать это автоматически, запустив:

 pip install "git https://github.com/apache/arrow@apache-arrow-0.16.0#egg=pyarrowamp;subdirectory=python"