Зависимости не установлены в Visual Studio

В версиях до Python 3.7 CPython имеет ограничение 255 явно переданных аргументов в вызове:

>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 1
SyntaxError: more than 255 arguments

Это ограничение существует, потому что до Python 3.5 код операции CALL_FUNCTION перегружает аргумент кода операции, чтобы кодировать как количество аргументов positional, так и ключевых слов в стеке, каждый из которых закодирован в одном байте.

Это ограничение удалено в предстоящей версии Python 3.7, см. issue # 27213 и issue # 12844 ; # 27213 переработал семейство кодов опций CALL_FUNCTION* для производительности и простоты (часть 3.6), освободив аргумент аргумента opcode только для кодирования одного аргумента, а # 12844 удалил проверку времени компиляции, которая помешала коду с большим количеством аргументов скомпилировано.

В 3.7, с опцией EXTENDED_ARG() opcode , теперь нет предела , сколько аргументов вы можете передать с помощью явного аргументы, за исключением того, сколько можно установить в стек (так привязано теперь к вашей памяти):

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=0, releaselevel='alpha', serial=2)
>>> def f(*args, **kwargs): pass
...
>>> exec("f({})".format(', '.join(map(str, range(256)))))
>>> exec("f({})".format(', '.join(map(str, range(2 ** 16)))))

Обратите внимание, что списки, кортежи и словари ограничены sys.maxsize , поэтому, если вызываемая функция использует *args и / или **kwargs параметры catch-all, то эти ограничены .

Для синтаксиса *args и **kwargs вызова (расширения аргументов) нет ограничений, кроме тех же sys.maxint ограничений размера для стандартных типов Python.

23
задан Roka545 21 June 2016 в 16:27
поделиться

4 ответа

Это все еще проблема в выпуске Visual Studio Community 2015, выпуск 3, при создании ASP.NET Core Web Application (.NET Framework 4.5.2) с помощью Empty ASP.NET Core Template. Похоже, что он работает правильно при создании проекта с использованием базового шаблона веб-приложения ASP.NET.

Как упоминалось выше, сообщение вводит в заблуждение, поскольку установлены зависимости. Кажется, Visual Studio просто сообщает, что npm и зависимости не установлены. Временное исправление заключается в переопределении там, где Visual Studio ищет файл node.js, который удаляет сообщения not installed в Visual Studio.

В Visual Studio перейдите к Tools > Options > Projects and Solutions > External Web Tools и добавьте путь к вашей установке node.js. По умолчанию он находится в C:\Program Files\nodejs\ или C:\Program Files (x86)\nodejs\. Переместите эту новую строку вверх или хотя бы выше строки $ (VSINSTALLDIR) \ Web \ External.

enter image description here

Восстановите ваши пакеты, и сообщение об ошибке должно исчезнуть.

enter image description here

43
ответ дан David Glass 21 June 2016 в 16:27
поделиться

У меня была та же проблема, и, следуя текущему ответу с наибольшим количеством голосов, добавив C:\Program Files\Nodejs в мои пути к внешним веб-инструментам , ничего не сделал . Даже изменение порядка путей не помогло.

>npm - v
4.2.0
>node - v
v6.10.0

Технически вы можете развернуть свое дерево зависимостей в Visual Studio, чтобы в конечном итоге найти проблему, однако проще просто запустить npm list и найти проблемного потомка.

problem_child

Таким образом, поскольку fsevents был виновником, и это была необязательная зависимость (она не используется при запуске узла с Visual Studio в архитектуре Windows), Я нашел модули, которые имели fsevents, как необязательную зависимость.

Для меня это был модуль ckokidar, однако он был расположен в двух местах.

MYPROJECT \ node_modules \ chokidar

, а также в

MYPROJECT \ node_modules \ browser-sync \ node_modules \ chokidar

Я подозреваю, что если у вас есть gulp-watch в качестве зависимости, она также может быть там.

Итак, что я сделал для каждой из этих папок, я открыл файл project.json и удалил все треки fsevents в них.

"dependencies": {
    ....
    "async-each": "^1.0.0", <-- also remember to remove the trailing ',' comma for the end
    "fsevents": "^1.0.0" <-- remove this
}

и

"keywords": [
    ...
    "file",       <-- remove comma
    "fsevents"    <-- remove
],

и удалите это полностью

"optionalDependencies": {
    "fsevents": "^1.0.0"
},

Не оставляйте запятые в любом из файлов, иначе вы получите ошибку с нпм.

Наконец, щелкните правой кнопкой мыши в Visual Studio на Зависимости и запустите Restore Packages. Теперь вы должны быть предупреждены бесплатно! Наслаждайтесь.

[+1131] result [+1131]
4
ответ дан Nick De Beer 21 June 2016 в 16:27
поделиться

Откройте package.json и начните удалять пакеты по одному, пока предупреждение не исчезнет.

enter image description here

После удаления "webpack": "^1.12.14", из package.json я больше не получаю предупреждение

enter image description here

1
ответ дан VK_217 21 June 2016 в 16:27
поделиться

Я последовал совету Дэвида Гласса, хотя казалось, что у меня есть проблема. Я обновил свой файл package.json, чтобы devDependencies совпал с зависимостями, и затем предупреждение исчезло.

0
ответ дан Edmund Covington 21 June 2016 в 16:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: