Имя python не распознано как имя командлета функции файла сценария или выполняемой программы
Недавно начал осваивать питон, учусь по этому гайду создавать бота в телеграмме https://habr.com/ru/post/495036/
Я так понимаю, что после третьей строчки сверху, должно создаться то самое окружение и в консоли также вначале всегда будет его название("venv" как на скрине), но у меня этого не выходит
Подумал, что может все ок, иду дальше. Flask установился, все хорошо
Дальше идет вот это
И продвинуться дальше я не смог, потому что при вводе (venv)$ export FLASK_APP=app.py, вылетает ошибка: export : Имя "export" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени,
а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ export FLASK_APP=app.py
+
+ CategoryInfo : ObjectNotFound: (export:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Надеюсь на вашу помощь, немного обидно, что делаешь все строго по инструкции, а по факту у тебя почему-то ничего не работает
PS C:\Users\Денис\weather_bot> c:; cd 'c:\Users\Денис\weather_bot'; & 'c:\Users\Денис\AppData\Local\Programs\Python\Python38\python.exe' 'c:\Users\Денис\.vscode\extensions\ms-python.python-2021.5.842923320\pythonFiles\lib\python\debugpy\launcher' '56042' '--' 'c:\Users\Денис\weather_bot\app.py'
Traceback (most recent call last):
File "c:\Users\Денис\weather_bot\app.py", line 1, in
from Flask import Flask
ModuleNotFoundError: No module named 'Flask'
PS C:\Users\Денис\weather_bot>
Что-то не так
Мне кажется, что все-таки проблема в вирт.окружении, которое не создалось
Adolf45, Не, можно и без него. У вас проблема что вы пишите from Flask import Flask, а нужно from flask import Flask
попробуйте установить путь таким образом:
для чего стоит, эта команда сделала это для меня (Python3.3):
Мне просто пришлось перезапустить Powershell после этого.
$env:path="$env:Path;C:\Python27" будет установлен только для текущего сеанса. В следующий раз, когда вы откроете Powershell, вам придется сделать то же самое снова.
на [Environment]::SetEnvironmentVariable() - это правильный путь,и он навсегда установил бы переменную среды PATH. Вам просто нужно снова запустить Powershell, чтобы увидеть эффект в этом случае.
для постоянного решения я нашел следующее:
это работает для меня навсегда:
каталог установлен неправильно, поэтому, пожалуйста, выполните следующие действия.
- "Мой Компьютер">правой кнопкой мыши> "Свойства" >"Свойства системы">"Дополнительно" вкладку
- "Переменные Среды" > "Путь" > "Редактировать"
в поле "значение переменной", убедитесь, что вы видите следующее:
нажмите "ОК", проверьте это изменение, перезапустив Windows powershell. Тип
теперь работает python версии 2! ура!
иногда вы устанавливаете Python в Windows, и он неправильно настраивает путь.
убедитесь, что вы вводите [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
в PowerShell, чтобы настроить его правильно.
вам также нужно перезагрузить PowerShell или весь компьютер, чтобы он действительно был исправлен.
С Руководство Python, это то, что сработало для меня (Python 2.7.9): [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")
просто исключите слово "пользователь". Это сработает.
возможно, разумно позволить установщику Python добавить сам путь. Ловушка здесь в том, что по умолчанию установщик Python делает не добавить путь для вас. Вы должны внимательно посмотреть (прокрутив вниз, чтобы увидеть, что было установлено) во время процесса установки, а не напрямую next ing до конца.
то, что он пропустил сказать, что вы не можете run as administrator еще вы установили его. Удаление и переустановка может сделать, но самое простое-щелкнуть правой кнопкой мыши и Troubleshoot compatibility , будьте осторожны на этот раз, чтобы проверить "добавить путь" в диалоговом окне "что установить" перед установкой next . Затем перезапустите powershell. Вот. Это работает на меня.
Я попытался установить , но у меня появилась следующая ошибка оболочки питания:
+ CategoryInfo: ObjectNotFound: (pip: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
- 1 запустите windows cmd, перейдите в каталог сценариев python (например, cd C: \ Python27 \ Scripts), затем запустите pip
- 1 Добавить пункт в PATH
Эта ошибка появляется в окнах, когда кто-то пытается использовать pip в командной строке. Чтобы решить эту ошибку в Windows, вы должны объявить переменную пути, выполнив следующие действия:
Шаг 1 - Щелкните правой кнопкой мыши "Мой компьютер" или "Этот компьютер".
Шаг 2 - Щелкните Свойства
Шаг 3 - Щелкните Расширенные настройки системы
- Перезапуск командной строки важен, даже открытие новой вкладки (как в новом терминале Microsoft) не сработает.
Это потому, что путь, по которому находится , не находится в вашей системной переменной PATH, поэтому cmd не может найти pip, простое исправление будет заключаться в том, чтобы перейти в каталог, где находится , и запустить, если оттуда, как это
Но лучшее решение - добавить его в переменную PATH. Откройте командную строку с правами администратора и запустите
который добавляет python в ваш PATH, вы можете проверить списки путей в вашей переменной пути, запустив
Вы должны увидеть там свой новый путь. Не забудьте перезапустить командную строку после того, как закончите.
Теперь вы можете запустить pip.
- alert: перезапишет существующее значение
- 1 Спасибо, что указали на это. Я обновил ответ, чтобы решить эту проблему
Я обнаружил, что использование PowerShell PIP не распознается, но в CMD это так.
Убедитесь, что вы действительно используете cmd, а не PowerShell для его запуска.
По сути, вам нужно добавить путь к вашей установке pip в системную переменную PATH.
Первый вариант
Загрузите pip, изменив установку Pyton.
Шаг 1 - Открыть Приложения и функции
Шаг 2 - Найдите Python и щелкните по нему
Шаг 3 - Нажмите Изменить
Шаг 4 - Выберите
Шаг 5 - Выберите и установите все
Это установит пип и добавьте оба, Python а также пип в переменные вашего окружения.
Второй вариант
По умолчанию, пип установлен в
Чтобы добавить путь к вашей установке pip в переменную PATH следуйте этим шагам.
Шаг 1 - Найдите переменные среды и открыть Отредактируйте переменные системной среды
Шаг 2 - Открытые переменные среды .
Шаг 3. Найдите свою переменную и выберите Изменить.
Шаг 4 - Вставьте местоположение в свой пип установка (по умолчанию )
Попробуй это. У меня сработало установка другой библиотеки:
- Откройте CMD от имени администратора одним из следующих способов:
Найдите путь к вашему приложению Python, то есть папку, в которую вы изначально установили Python. В моем случае путь к приложению Python:
C: \ Users \ Admin \ AppData \ Local \ Programs \ Python \ Python38
- Напишите свою команду python сейчас и нажмите ввод, например:
Просто переустановите python и нажмите добавить в PATH в установщике!
Если первое решение не сработало, обратите внимание на свой путь, есть небольшой шанс вместо написания:
если вы не можете выполнить в Visual Studio, сначала запишите его в cmd, закройте и откройте свою визуальную студию.
Новый участник ismail PANDA - новый участник этого сайта. Позаботьтесь о разъяснениях, комментариях и ответах. Ознакомьтесь с нашим Кодексом поведения.
Я пытался установить Azure с помощью Install-Module Azure в PowerShell. Получила следующую ошибку:
Почему PS не распознает базовый модуль установки? Без этого я даже не могу установить Azure. Что я должен делать?
Поскольку вы используете более раннюю версию PS:
Что вы можете сделать в вашем случае, так это сначала загрузить модуль в свою локальную папку.
Затем будет .psm1 файл в этой папке для этого модуля.
Это сделает вашу работу.
Другой вариант исправления этой ошибки на основе графического интерфейса пользователя - загрузить модули PowerShell PackageManagement (установщик msi) с веб-сайта Microsoft и установить модули.
Вам следует установить последнюю версию PowerShell, а затем использовать эту команду Install-Module Azure для установки лазурного модуля. Поскольку начиная с Powershell 5.0 вы сможете использовать командлет для Установить модуль, Сохранить модуль
Дополнительные сведения об установке Azure PowerShell см. По ссылке.
У меня Windows 10 и PowerShell 5.1 уже был установлен. По какой-то причине версия x86 работает и может найти "Install-Module", а другая версия - нет.
Вот что я испытываю между двумя разными версиями:
Если вы пытаетесь установить модуль, который указан в центральном репозитории для содержимого PS, который называется PowerShell Gallery, вам необходимо установить PowerShellGet. Тогда команда будет доступна. Сейчас я использую PS 4.0. Установка PowerShellGet помогла мне.
С помощью новейшего модуля PowerShellGet вы можете:
- Поиск предметов в галерее с помощью Find-Module и Find-Script
- Сохраняйте элементы в вашей системе из галереи с помощью модуля сохранения и сценария сохранения
- Устанавливайте элементы из галереи с помощью Install-Module и Install-Script
- Загружайте элементы в галерею с помощью модуля публикации и сценария публикации
- Добавьте свой собственный репозиторий с помощью Register-PSRepository
Еще одна отличная статья для начала работы с PS Gallery.
- То же самое произошло и со мной - набор вручную вместо копирования и вставки спас день после 10 минут скрежета зубами. Спасибо за внимание
У меня не было поставщика пакетов NuGet, вы можете проверить, работает Get-PackageProvider :
Решение устанавливало его, выполнив эту команду:
Если это не удается с ошибкой ниже, вы можете скопировать / вставить папку NuGet с другого ПК (требуется администратор): C: \ Program Files \ PackageManagement \ ProviderAssemblies\ NuGet:
Я думаю, что приведенный выше ответ, опубликованный Джереми Томпсоном, является правильным, но у меня недостаточно репутации для комментариев. Как только я обновил nuget и powershellget, мне стал доступен Install-Module.
Что интересно, номера версий, возвращаемые get-packageprovider, не изменились после обновления.
Выполните следующие команды от имени администратора для установки NuGet используя Powershell:
У меня был старый сервер, на котором я не мог работать install-module поскольку версия PowerShell была 4.0. Вы можете проверить версию PowerShell с помощью командной строки PowerShell.
Используйте эту ссылку, чтобы загрузить необходимые обновления. Проверьте, требуется ли обновление для вашей версии Windows.
При создании функции Powershell мы можем передать в нее разные параметры использую атрибут Parameters() и блок param(). Эти параметры могут быть использованы при работе в конвейере, валидации типов данных, определении обязательности их использования, значений по умолчанию и многого другого. В этой статье мы разберем как использовать Powershell Parameters() и param() на примерах.
Навигация по посту
Где и как использовать param и Parameters
Создавая функции (команды) мы преследуем одну цель - сделать возможность использования какого-то кода многократным. С таким подходом следующая функция имеет право на жизнь:
Ситуация меняется, например, когда вам нужно пинговать разные хосты. Самым плохим вариантом будет дублирование предыдущего кода:
Такой подход нарушает один из основных принципов программирования DRY (dont repeat yourself). Его смысл простой - избегайте дублирование написанного кода. Дублирование кода понижает риск ошибок и дальнейшей поддержки. Это основной смысл функций.
Для соблюдения принципа DRY есть несколько вариантов.
Переменная args
Эта переменная создается автоматически при вызове команды:
Что бы получать доступ к каждому значение мы должны обращаться к нему по индексу:
Именованные параметры
Более очевидным способом передачи значений - использование именованных параметров. Мы присваиваем значение определенным ключам (параметрам). Такая реализация чаще всего применяется в создании функций.
Использование ключей выглядит так:
Вряд ли у вас возникнут сомнения в том, что должно находится в параметре "ComputerName" или "Hops". Это нельзя гарантировать при использовании "$args".
Что бы реализовать параметры в вашей функции существует 2 подхода.
Первый способ похож на реализацию параметров в большинстве языков, мы просто помещаем их в круглые скобки:
Второй способ реализуется через блок param() в котором мы объявляем параметры:
Оба примера отменяют возможность работы переменной "$args" - массив просто будет пустым.
Расширенные функции с CmdletBinding и Parameter
Пример использования (только для демонстрации синтаксиса):
Так как я сам легко путаюсь в понятии параметр, аргумент и атрибут, ниже скриншот с небольшим объяснением:
- Все что помещается в квадратные скобки - это атрибуты. На скриншоте, под номерами 1 и 2, выделена их часть;
- Параметры это то, что мы передаем в функцию/команду. Я, например, их часто называю ключами. На скриншоте они находятся под номерами 3 и 4;
- Внутри атрибутов находятся аргументы. Это просто характеристики параметра. Часть из них выделена под номером 5. Аргументами так же называют значения, которые передаются в параметр.
Переменная $PSBoundParameters
После того, как у функции появляются параметры, переменная "$args" становится пустой. Вместо нее создается переменная $PSBoundParameters. Переменная хранит хэш-таблицу с ключами-значениями:
Использование param в файлах
Далее мы можем вызвать этот файл и передать в него значения:
Обязательные Mandatory аргументы
Если вы не используете параметр явно, то он у вас будет запрошен. Это правило, в случае выше, касается только одного параметра так как он является обязательным.
Проверка типов и значение по умолчанию
Хороший прием по предотвращению ошибок - добавить проверку типов данных в начале функции. В Powershell много разных типов данных - далее перечислены основные:
- [string] - строка;
- [int] - число;
- [bool] - True/False;
- [float] - число с плавающей точкой;
- [DateTime] - дата и время;
- [array] - массив;
- [hashtable] - массив ключ-значение;
- [PSCustomObject] - массив ключ-значение.
Эта проверка выполняется до объявления переменной.
Обратите внимание, что в функцию передается булево значение и число. Так как они могут быть преобразованы в строки - эта конвертация происходит. В случае массивов произошла бы ошибка т.к. он не может быть преобразован в строку.
switch
Разделение параметров на группы с ParameterSetName
У нас выводится 2 возможных варианта использования команды. Для каждого из варианта использования команды могут быть определены свои индивидуальные ключи. Именно для этого используется ParameterSetName.
Если вы попробуете запустить команду без указания каких либо групп - получите ошибку:
- Не удается разрешить набор параметров с использованием указанных именованных параметров.
- parameter set cannot be resolved using the specified named parameters
Определение выбранной группы с $PSCmdlet
Если какой-то параметр не будет принадлежать к конкретной группе - его можно будет использовать в любых комбинациях.
Позиционные параметры с Position
При создании команды каждый параметр имеет свою позицию. Эти позиции соответствуют порядку их объявления внутри функции:
Параметры конвейера
Для использования конвейера можно определить несколько аргументов:
- ValueFromPipeline - работает с массивами. Может быть использован в функции единожды;
- ValueFromPipelineByPropertyName - принимает массивы ключ значение. Можно использовать множество раз.
Создадим функцию, которая будет принимать оба параметра:
В отличие от всех предыдущих примеров, при создании конвейера, мы должны использовать блок Process. Это единственный блок, функционал которого будет повторяться для каждого элемента переданного через конвейер. Если вы его не будете использовать - функция будет выполнена только для последнего элемента. Более подробно конвейер обсуждался в предыдущей статье: "Разбираем работу конвейера Powershell на примере команд и создании функции".
Включаем значения вне параметров с ValueFromRemainingArguments
Обратите внимание, что порядок в этом случае не важен.
Атрибуты валидации параметров
Значения у параметров могут проходить разные проверки. Для этих проверок существуют разные атрибуты:
Рассмотрим некоторые из этих атрибутов.
Проверка на $null
Ошибки при этом могут быть разными:
Если в вашей функции это ожидаемый результат - вы можете допустить передачу "$null" с "[AllowNull()]":
Перед указанием таких атрибутов стоит проверить во что будет преобразован ваш тип данных, например:
Подсчет значений
Вы можете считать количество элементов в массиве (ValidateCount), длину строк (ValidateLength) и числа (ValidateRange). Эти атрибуты работают одинаково - вам нужно указать минимальное и максимальное значение:
Проверка по скрипту
Вы можете создать свою проверку параметров с помощью "ValidateScript". Так вы создадите параметр, который запретит указывать прошедшие даты:
Ошибка происходит из-за того, что команда отправляет данные, допустим в 11.1 секунд, а валидация в 11.2. Во втором примере мы добавляем 1 секунду что бы ошибки не было.
Вместо "$PSItem" можно использовать "$_".
Проверка по шаблонам регулярных выражений
Мы можем привязать к параметру проверку на простые регулярные выражения (SupportsWildcards) и расширенные (ValidatePattern). Так мы убедимся, что в параметр передают валидный IP адрес:
Ограничение выбора значений с ValidateSet
У вас будет выполняться переключение между значениями: Continue, Ignore, Inquire и т.д.
Подобный выбор задается в атрибуте ValidateSet:
- Get-Salary : Не удается проверить аргумент для параметра "User". Аргумент "Маши1"
Передача ключей и значений в одной переменной (Splatting)
Обычный вызов команды выглядит следующим образом:
Мы можем взять все ключи и значения из этой команды, поместить в hashtable и передать в команду как набор параметров:
Если в hashtable будет находиться дополнительный параметр, который не реализован в команде, то выйдет ошибка:
- Не удается найти параметр, соответствующий имени параметра
- A parameter cannot be found that matches parameter name
Обычные массивы так тоже можно передавать, но вы должны знать позиции под которыми должны располагаться значения:
Используя splatting, в Powershell 7+, вы можете перезаписывать значения из метода splatting:
Алиасы
Читайте также: