Pipenv и Docker
Способ #1. Простой способ использовать pipenv в сборке Docker — экспортировать файл require.txt. Вы можете сделать это вне сборки Docker, и просто передать полученный файл в систему управления версиями, а затем использовать Dockerfile. Выполнить это можно следующим образом:
Плюс в том, что Dockerfile не нужно ничего знать о pipenv. Иначе, это потребовало бы обновлять файл при каждом обновлении .
В качестве альтернативы можно выполнить экспорт в самой сборке:
Способ #2. Второй вариант связан с использованием дополнительных флагов при установке пакетов.
— pipenv выдаст ошибку если Pipfile.lock устарел, вместо того, чтобы сгенерировать новый Pipfile.lock файл.
— устанавливать зависимости в родительскую систему.
Рассмотрим пример Dockerfile для развертывания Flask приложения:
Установить новый Python
Список доступных для установки через pyenv версий можно получить выполнив
pyenv install —list
Версий очень много, поэтому советую воспользоваться
grep
pyenv install —list | grep «3\.»
3.8.0
3.8-dev
3.8.1
3.8.2
3.8.3
3.8.4
3.8.5
3.8.6
3.8.7
3.8.8
3.8.9
3.8.10
3.9.0
3.9-dev
3.9.1
3.9.2
3.9.3
3.9.4
3.9.5
miniconda-3.8.3
miniconda-3.9.1
miniconda3-3.8.3
miniconda3-3.8-4.8.2
miniconda3-3.8-4.8.3
miniconda3-3.8-4.9.2
miniconda3-3.9.1
miniconda3-3.9-4.9.2
Установить нужную версию (я выбрал 3.9.5) можно командой
pyenv isntall 3.9.5
Downloading Python-3.9.5.tar.xz…
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5…
Installed Python-3.9.5 to /home/andrei/.pyenv/versions/3.9.5
19 ответов
Лучший ответ
Поддержка Python 3 была добавлена в NumPy версии 1.5.0, поэтому для начала вы должны загрузить / установить более новую версию NumPy.
56
unutbu
19 Окт 2011 в 08:58
У меня тоже была эта проблема после того, как я установил Numpy. Я решил это, просто закрыв интерпретатор Python и открыв его снова. Это может быть что-то еще, чтобы попытаться, если у кого-то еще есть эта проблема, возможно, это сэкономит несколько минут!
7
Chet
15 Мар 2012 в 20:54
Я точно не знаю, почему я получил ошибку, но затем решили эту проблему для меня.
3
Clay H
25 Фев 2017 в 14:12
Можешь попробовать:
В вашем случае используйте:
Благодарность
1
Clinton Roy
14 Сен 2019 в 05:14
Те, кто использует , делают .
2
Necktwi
15 Фев 2018 в 04:36
У меня также была эта проблема (Ошибка импорта: ни один модуль с именем numpy), но в моем случае это была проблема с моими переменными PATH в Mac OS X. Я ранее внес изменения в мой файл .bash_profile, который вызвал пути для моей установки Anaconda (и другие) не будут добавлены должным образом.
Просто добавьте этот комментарий в список здесь на тот случай, если другие люди, подобные мне, зайдут на эту страницу с тем же сообщением об ошибке и столкнутся с той же проблемой, что и я.
12
Bill
2 Май 2015 в 18:17
После того, как я попробовал много предложений с разных сайтов и схожих вопросов, мне удалось удалить все компоненты Python и переустановить только Anaconda (см. https: / /stackoverflow.com/a/38330088/1083292 )
Предыдущая установка Python, которую я имел, была не только избыточной, но и доставляла мне неприятности.
erezmk
5 Окт 2018 в 23:24
Столкнулся с той же проблемой
Итак, в нашем случае (мы используем PIP и python 2.7) решение было SPLIT : команды установки pip:
Из
К
Решение можно найти здесь: https://github.com/pandas-dev/pandas/issues/25193, это связано последнее обновление панд до v0.24.0
5
Nigrimmist
12 Фев 2019 в 13:39
Я получил это, хотя я знал, что numpy был установлен, и безуспешно попробовал все советы выше. Для меня было исправлено удаление как np и прямая ссылка на модули. (питон 3.4.8 на Centos) ,
1
zzapper
29 Июн 2018 в 12:35
Я установил numpy в одной и той же среде, как с помощью pip, так и с помощью conda, и простого удаления и переустановки было недостаточно
Мне пришлось переустанавливать оба.
Я не знаю, почему это случилось внезапно, но решение было
Удаление из conda также удалило и .
Тогда
А также
Это решило проблему для меня.
5
Gulzar
22 Дек 2018 в 12:56
Вы установили версию Numpy для Python 2.6 — так что вы можете использовать ее только с Python 2.6. Вы должны установить Numpy для Python 3.x, например, что: http://sourceforge.net /projects/numpy/files/NumPy/1.6.1/
7
naeg
19 Окт 2011 в 08:59
Если бы он работал до переустановки Python, это решило бы проблему.
Я просто ударил и решил эту проблему, используя: Как установить предыдущая версия Python 3 в macOS, использующая homebrew?
Fakrudeen
19 Дек 2019 в 20:28
Я тоже столкнулся с вышеуказанной проблемой с python 3 при настройке python для машинного обучения.
Я выполнил следующие шаги: —
Установите python-2.7.13.msi
• установить PATH = C: \ Python27
• установить PATH = C: \ Python27 \ Scripts
Перейдите на страницу
Скачано: — — numpy-1.13.1 + mkl-cp27-cp27m-win32.whl
Установка numpy: pip install numpy-1.13.1 + mkl-cp27-cp27m-win32.whl
Установка scipy: pip install scipy-0.18.0-cp27-cp27m-win32.whl
Вы можете проверить правильность, используя ниже cmds: —
3
Vikram S
27 Сен 2017 в 05:58
Вы можете просто использовать
Или для python3 используйте
242
Daniel Patru
14 Дек 2017 в 08:15
Я думаю, что-то не так с установкой NumPy. Вот мои шаги, чтобы решить эту проблему.
- перейдите на этот веб-сайт, чтобы загрузить правильный пакет: http://sourceforge.net/projects/numpy/files/
- распаковать пакет
- перейти к документу
- используйте эту команду для установки numpy:
15
legoscia
9 Дек 2013 в 16:15
Вы должны попытаться установить Numpy, используя один из них:
По какой-то причине в моем случае pip2 решил проблему
Ateik
13 Фев 2020 в 20:16
Для установки NumPy через Anaconda (используйте команды ниже):
- Конда установить -c Конда-Forge Numpy
- Конда установить -c Конда-Forge / метка / сломанный Numpy
3
Rashmi Nagpal
1 Ноя 2017 в 04:32
Для тех, кто использует Python 2.7, следует попробовать:
Вместо пипса установите numpy
2
georgeos
29 Июл 2019 в 19:05
Это проблема версии numpy, пожалуйста, посмотрите $ CAFFE_ROOT / python / demand.txt. Затем exec: sudo apt-get install python-numpy> = x.x.x, эта проблема будет решена.
1
zhangyi
11 Май 2016 в 15:18
Что делать если у меня уже есть requirements.txt. Как его с конвертировать в Pipfilee?
Если вы запускаете pipenv install, он должен автоматически определить наличия файла requirements.txt и преобразовать его в файл Pipfile, выдав похожее сообщение:
requirements.txt found, instead of Pipfile! Converting… Warning: Your Pipfile now contains pinned versions, if your requirements.txt did. We recommend updating your Pipfile to specify the "*" version, instead.
Если вы указали точные версии в вашем файле requirements.txt, вы, вероятно, захотите изменить свой Pipfile, указав только те версии, которые вам действительно нужны. Это позволит вам получить все преимущества от перехода на Pipenv. Например, допустим, у вас есть следующая зависимость, но вам не нужна точная версия numpy:
numpy = "==1.14.1"
Если у вас нет особых требований к версии ваших зависимостей, вы можете использовать подстановочный знак *, чтобы сообщить Pipenv, что можно установить любую версию:
numpy = "*"
Если вы опасаетесь использовать любую версию *, обычно лучше указывать текущую версию, в которой вы уже находитесь, или более старшую:
numpy = ">=1.14.1"
Вы также можете установить зависимости из файла requirements.txt вручную используя аргумент -r:
$ pipenv install -r requirements.txt
Если у вас есть файл dev-requirements.txt или что-то подобное, вы также можете добавить их в Pipfile. Просто добавьте аргумент —dev, чтобы он был помещен в правильный раздел:
$ pipenv install -r dev-requirements.txt --dev
Кроме того, вы можете пойти другим путем и сгенерировать файлы requirements.txt из Pipfile:
$ pipenv lock -r > requirements.txt $ pipenv lock -r -d > dev-requirements.txt
Сборка Python 3.9.2 в Linux из исходников
Этот способ может показаться немного сложнее предыдущего, но зато с помощью него можно установить самую свежую версию Python, которая доступна на официальном сайте. Процесс установки опробован на ОС Ubuntu 20, также его можно применять и на Debian 10.
sudo apt update
На следующем шаге, необходимо инсталлировать необходимые нам для работы пакеты:
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
Затем перейдем в папку /tmp и скачаем в нее архив с официального сайта Python*:
cd /tmp/ wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
*Примечание: можно использовать как команду wget, так и команду curl.
Cейчас распакуем этот архив во временную папку и затем его сразу же и удалим:
tar -xf Python-3.9.2.tgz rm Python-Python-3.9.2.tgz
На следующем этапе, запустим команду, которая выполнит подготовку к установке (enable-optimization — служит для оптимизации двоичного файла Python). Исполнение данной команды займет некоторое время:
cd Python-3.9.2 ./configure --enable-optimizations
Для того, чтобы начать процесс сборки, выполним команду*:
make -j 2
*Примечание: цифра 2 указывает на количество ядер процессора. Узнать эти данные можно с помощью команды nproc.
Если в процессе сборки будут замечены проблемы, то необходимо запустить сборку в однопоточном режиме, следующим образом (без параметров -j 2), просто выполнив команду make.
Теперь установим Python 3.9.2 с помощью команды altinstall, последняя версия Python инсталлируется наряду со старыми версиями, т.е. у вас в ОС будет несколько версий языка Python. Если же вы используете команду install, то новая версия питон будет установлена поверх старых (а все старые версии будут удалены).
sudo make altinstall
*Процесс инсталляции Python путем сборки пакета из исходников может занять длительное время.
В результате, в нашей ОС Ubuntu 20 (Debian 10) будет установлено сразу несколько версий языка Python, у нас конкретно — это версии 3.9.2 и 3.8.5, проверить можно с помощью команд:
python3.9 --version python3.8 --version
Копаемся в артефактах PyInstaller ↑
PyInstaller сложен внутри и при работе создаёт массу информации
Итак, важно знать, на чем сосредоточиться в первую очередь. А именно исполняемый файл, который вы можете распространять среди пользователей, и потенциальную отладочную информацию
По умолчанию команда pyinstaller создает несколько интересных моментов:
- Файл спецификации *.spec
- Папка сборки Build
- Папка дистрибутива Dist
Файл спецификаций
По умолчанию файл спецификации будет назван в честь вашего сценария командной строки. Продолжая наш предыдущий пример, вы увидите файл с именем cli.spec. Вот как выглядит файл спецификации по умолчанию после запуска PyInstaller в файле cli.py:
# -*- mode: python -*- block_cipher = None a = Analysis(, pathex=['/Users/realpython/pyinstaller/reader'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, [], exclude_binaries=True, name='cli', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, console=True ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name='cli')
Этот файл будет автоматически создан командой pyinstaller. У вашей версии будут разные пути, но большинство должно быть одинаковым.
Не волнуйтесь, вам не нужно понимать приведенный выше код, чтобы эффективно использовать PyInstaller!
Этот файл можно изменить и повторно использовать для создания исполняемых файлов позже. Вы можете сделать будущие сборки немного быстрее, предоставив этот файл спецификации вместо сценария точки входа для команды pyinstaller.
Есть несколько конкретных вариантов . Однако для простых проектов вам не нужно беспокоиться об этих деталях, если вы не хотите сильно настраивать способ сборки вашего проекта.
Папка сборки Build
Папка build — это то место, куда PyInstaller помещает большую часть метаданных и внутренней бухгалтерии для создания вашего исполняемого файла. Содержимое по умолчанию будет выглядеть примерно так:
| └── cli/ ├── Analysis-00.toc ├── base_library.zip ├── COLLECT-00.toc ├── EXE-00.toc ├── PKG-00.pkg ├── PKG-00.toc ├── PYZ-00.pyz ├── PYZ-00.toc ├── warn-cli.txt └── xref-cli.html
Папка сборки может быть полезна для отладки, но, если у вас нет проблем, эту папку можно в значительной степени игнорировать. Вы узнаете больше об отладке позже в этом уроке.
Папка Dist
После сборки вы получите папку dist, подобную следующей:
dist/ | └── cli/ └── cli
Папка dist содержит последний вариант приложения, который вы хотите отправить своим пользователям. Внутри папки dist есть папка, названная в честь вашей точки входа. Итак, в этом примере у вас будет папка dist/cli, содержащая все зависимости и исполняемый файл для нашего приложения. Исполняемый файл для запуска — dist/cli/cli или dist/cli/cli.exe, если вы работаете в Windows.
Вы также найдете множество файлов с расширениями .so, .pyd и .dll в зависимости от вашей операционной системы. Это общие библиотеки, которые представляют зависимости вашего проекта, которые PyInstaller создал и собрал.
Вы захотите распространить всю папку dist/cli, но вы можете переименовать cli во все, что вам подходит.
На этом этапе вы можете попробовать запустить исполняемый файл dist/cli/cli.exe, если вы следуете примеру программы чтения каналов.
Вы заметите, что запуск исполняемого файла приводит к ошибкам, в которых упоминается файл version.txt. Это связано с тем, что программе чтения каналов и ее зависимостям требуются некоторые дополнительные файлы данных, о которых PyInstaller не знает. Чтобы исправить это, вам нужно сообщить PyInstaller, что требуется version.txt, о чем вы узнаете при тестировании нового исполняемого файла.
Проблемы распространения ↑
Настройка проекта Python может быть неприятной, особенно для не разработчиков. Часто установка начинается с открытия Терминала, который не запускается для огромной группы потенциальных пользователей. Это препятствие останавливает пользователей еще до того, как руководство по установке углубится в сложные детали виртуальных сред, версий Python и т.д. и множество потенциальных зависимостей.
Вспомните, через что вы обычно проходите, настраивая новую машину для разработки Python. Вероятно, это выглядит примерно так:
- Загрузите и установите нужную версию Python;
- Настроить менеджер зависимостей;
- Настроить виртуальную среду;
- Получить копию своего кода;
- Установить зависимости.
Остановитесь на мгновение и подумайте, есть ли смысл в любом из вышеперечисленных шагов, если вы не разработчик, не говоря уже о разработчике Python. Возможно нет.
Эти проблемы взорвутся, если вашему пользователю посчастливится добраться до части установки, связанной с зависимостями. Это стало намного лучше за последние несколько лет с преобладанием колес, но для некоторых зависимостей по-прежнему требуются компиляторы C/C++ или даже FORTRAN!
Этот барьер для входа слишком высок, если ваша цель — сделать приложение доступным как можно большему количеству пользователей. Как часто говорит Раймонд Хеттингер в своих замечательных выступлениях:
Использование PyInstaller ↑
Первый шаг — установить PyInstaller из PyPI. Это можно сделать, используя pip, как и для других пакетов Python:
$ pip install pyinstaller
pip установит зависимости PyInstaller вместе с новой командой: pyinstaller. PyInstaller можно импортировать в код Python и использовать в качестве библиотеки, но вы, скорее всего, будете использовать его только как инструмент командной строки.
Вы будете использовать интерфейс библиотеки, если будете создавать свои собственные .
Вы увеличите вероятность того, что по умолчанию PyInstaller создаст исполняемый файл, если у вас есть только чистые зависимости Python. Однако не стоит особо беспокоиться, если у вас более сложные зависимости от расширений C/C++.
PyInstaller поддерживает множество популярных пакетов, таких как NumPy, PyQt и Matplotlib, без каких-либо дополнительных действий с вашей стороны. Вы можете узнать больше о списке пакетов, которые PyInstaller официально поддерживает, обратившись к документации PyInstaller.
Не беспокойтесь, если некоторые из ваших зависимостей не указаны в официальной документации. Многие пакеты Python работают нормально. Фактически, PyInstaller достаточно популярен, поэтому во многих проектах есть объяснения, как заставить вещи работать с PyInstaller.
Одним словом, шансы на то, что ваш проект сработает «из коробки», высоки.
Чтобы попробовать создать исполняемый файл со всеми значениями по умолчанию, просто дайте PyInstaller имя вашего основного сценария точки входа.
Сначала в папку с вашей записью — укажите и передайте его в качестве аргумента команде pyinstaller, которая была добавлена в ваш PATH при установке PyInstaller.
Например, введите следующее после того, как вы cd в каталог программы чтения верхнего уровня, если вы подписаны на проект вместе с проектом чтения каналов:
$ pyinstaller cli.py
Не пугайтесь, если при создании исполняемого файла вы увидите много результатов. PyInstaller по умолчанию является подробным, и его можно увеличить для отладки, что вы увидите позже.
Стоит ли использовать Pipenv?
Определенно. Даже если это просто способ объединить инструменты, которые вы уже используете (pip & virtualenv), в единый интерфейс. Тем не менее, это гораздо больше, чем просто объеденение. Используя Pipfile вы указываете только те зависимости, которые вам действительно нужны.
У вас больше не будет головной боли, от того что вам нужно было самим управлять версиями всего лишь для того, чтобы убедиться, что вы можете клонировать свою среду разработки. С Pipfile.lock вы можете работать над своим проектом со спокойной душой, зная, что вы можете точно воспроизвести свое окружение в любом месте.
В дополнение ко всему, весьма вероятно, что формат Pipfile будет принят и поддержан как официальный инструмент Python, такими как pip, поэтому было бы полезно заранее ознакомится с ним.
11 ответов
Лучший ответ
Установка криптографии версии 2.8 в файле requirements.txt устранила проблему.
36
Abhi
15 Фев 2020 в 20:43
Я получил эту ошибку, пытаясь установить Scrapy с Python 3.8.1 на Windows 10, но он решил установить последнюю версию pip (19.3.1 в моем случае), и все работает с использованием pip следующим образом:
2
Camilo Caquimbo
29 Дек 2019 в 05:42
TLDR ;
Попробуйте использовать
Детали:
Это произошло на на ПК. У меня в файле requirements.txt было следующее:
Я удалил версию и сохранил только криптографию в файле requirements.txt , как показано ниже.
Сохранил requirements.txt , а затем запустил
Он успешно установлен. Затем я замораживаю requirements.txt , выполнив следующую команду
Затем файл requirements.txt был обновлен до
30
navule
19 Окт 2020 в 17:26
Я была такая же проблема. версия pip3 была 19. * после обновления работает
inaxion-dev
11 Июн 2021 в 21:26
Была также эта проблема. Если вы используете alpine, убедитесь, что установлены все зависимости для криптографии. В моем случае грузовой пакет отсутствовал и вызвал проблему.
27
vinzee
19 Июл 2021 в 20:01
В моем случае (windows 10 + conda) обновление pip устранило проблему:
23
vinzee
19 Июл 2021 в 20:01
Загляните в эту проблему, и решение фактически находится в сообщении, когда pip пытается установить openssl перед криптографией:
Просто запуск команды обновления pip, похоже, сработал для меня:
Которая обновила pip с версии 18.0 до версии 21.0.1
9
Aneuway
18 Фев 2021 в 23:43
Я столкнулся с той же проблемой и попытался установить openssl с помощью упомянутого шага, но все еще не смог продолжить работу для Windows 10. Позже я обновил pip до последней версии и попытался снова, и он работал без каких-либо проблем.
Я бы порекомендовал обновить pip до последней версии и попробовать, прежде чем приступить к установке openssl
2
Idris Merchant
19 Дек 2020 в 10:22
Вы можете использовать самую последнюю версию с
Работал у меня с ubuntu: 18.04 на arm32v7 (вместо этого, как предлагается в сообщении об ошибке, установите полный компилятор ржавчины и необходимые компоненты для сборки или обновите pip (что не повлияло на ubuntu: 18.04 на моем armbian))
2
FoxRomeo
10 Фев 2021 в 10:52
Попробуйте обновить pip вашей среды, у меня все нормально.
1
Slava Rozhnev
15 Июн 2021 в 13:38
У меня была эта проблема, я только что установил ржавчину, и проблема исправлена для меня Вы можете установить конечную версию криптографии после установки языка программирования ржавчины (не пытайтесь установить ржавчину pip, это не пакет python) https://www.rust-lang.org/tools/install
Masoud A.
23 Апр 2021 в 05:02