pip, но python дает ошибку импорта [duplicate]

Вы можете использовать функцию javascript eval () , чтобы убедиться, что она действительна.

например

var jsonString = '{ "Id": 1, "Name": "Coke" }';
var json;

try {
  json = eval(jsonString);
} catch (exception) {
  //It's advisable to always catch an exception since eval() is a javascript executor...
  json = null;
}

if (json) {
  //this is json
}

В качестве альтернативы вы можете использовать JSON.parse из json.org :

try {
  json = JSON.parse(jsonString);
} catch (exception) {
  json = null;
}

if (json) {
  //this is json
}

Надеюсь, что это поможет.

ВНИМАНИЕ: eval() опасно, если кто-то добавляет вредоносный JS-код, поскольку он выполнит его. Убедитесь, что строка JSON заслуживает доверия , т. Е. Вы получили ее из надежного источника.

Изменить Для моего 1-го решения рекомендуется сделать это.

 try {
      json = eval("{" + jsonString + "}");
    } catch (exception) {
      //It's advisable to always catch an exception since eval() is a javascript executor...
      json = null;
    }

В гарантировать json-ness. Если jsonString не является чистым JSON, eval выдаст исключение.

48
задан Skyler 2 January 2013 в 15:57
поделиться

4 ответа

Почему это запуталось?

Есть пара разных способов установить Python, как говорит обновление OP, и они размещают файлы в разных местах. Например, macports помещает вещи в /opt/local/, а homebrew помещает вещи в /usr/local/. Кроме того, Mac OS X предлагает несколько версий python с собой. Таким образом, если вы устанавливаете python много раз разными способами, вы получите много версий python, независимо существующих в вашей системе.

Какая проблема возникает?

Я точно не знаю , Я думаю, проблема в том, что если у вас много версий python, то какой из них использовать и где найти пакеты будет определяться порядком пути в вашей системе PATH и PYTHONPATH соответственно. Таким образом, вы можете потерять контроль над установкой модулей python. Учтите, что если вы запустите sudo python setup.py install для установки модуля (он найдет python у root PATH), а затем попробуйте import модуль python -c "import it" (на этот раз он найдет python вашим PATH), возможно что-то пойдет не так. Это моя догадка, я не подтвердил это. Но в моем собственном случае что-то пошло не так.

Как избежать этого?

Я думаю, что принцип заключается в том, чтобы знать о том, что разные способы и инструменты устанавливают вещи независимо друг от друга местоположения, поэтому используйте их осторожно.

  • Если вы не намерены, не устанавливайте одну и ту же вещь дважды разными способами. (Если вы намереваетесь сделать это для python, вы можете проверить virtualenv)
  • Следить за порядком пути в вашем PATH и подумать, правильно ли это.
  • При установке модулей убедитесь, что работает python (или pip) и где установлен модуль.

Итак, как я решил свой собственный случай?

Поскольку он уже запутывался и, казалось, очень трудно вылечить, поэтому, наконец, я решил этот вопрос с полной переустановкой ОС и начал следить за DOs-DONT выше. Для установки научной среды с помощью python (numpy / scipy / matplotlib, который показал проблемы, чтобы заставить меня задать этот вопрос), я нашел этот учебник был чрезвычайно полезен. Итак, проблема решена окончательно.

22
ответ дан RichVel 19 August 2018 в 06:51
поделиться
  • 1
    Это полезный учебник по установке для чистой настройки Python + NumPy и т. Д. - теперь он ссылается на lowindata.com/2013/installing-scientific-python-on-mac-os-x , что является более простым подходом. – RichVel 23 September 2013 в 17:34
  • 2
    спасибо за понимание и рекомендации. Кажется, я вхожу в ловушку в подобной ситуации, но она не становится неуправляемой ... пока. Я нашел полезный пост: leemendelowitz.github.io/blog/… , который помогает находить, где определенная версия python ищет импорт и в основном вручную заставляла их искать в нужном месте для правильного через символические ссылки. – alisa 7 November 2016 в 23:04
  • 3
    Кроме того, не слепо следуйте инструкциям в Интернете относительно получения чего-то работающего. Поэтому придерживайтесь homebrew или macports в зависимости от ваших предпочтений. Не используйте оба. Не используйте dmg или pkg для установки определенных пакетов, если у вас есть homebrew fx. придерживайтесь homebrew, несмотря ни на что. Если на данный момент у вас есть несколько вещей, попробуйте просто их удалить. – Alex R 9 August 2017 в 09:07

Чтобы установить дистрибутивы python в определенную папку, вы можете использовать схему --prefix во время установки python. Используя префикс , вы можете, например, установить Python 2.7 в папку /opt/py27. Теперь, чтобы использовать новый установленный дистрибутив Python, вы должны: очистить PATH и LD_LIBRARY_PATH:

  • Удалить все «старые» пути Python и
  • configure (согласно мой пример) переменные среды, подобные этому: PATH: Добавить / opt / py27 / bin LD_LIBRARY_PATH: Добавить / opt / py27 / lib

Вот и все.

(Если вам нужны несколько сред Python, установленных одновременно, я бы предложил посмотреть на virtualenv )

7
ответ дан gecco 19 August 2018 в 06:51
поделиться
  • 1
    Спасибо! Я попробую. – Skyler 2 January 2013 в 10:20
  • 2
    Я сделал то, что вы сказали, но проблема остается. Он выдает ошибки, когда я import nest, и я считаю, что это вызвано множественными копиями библиотек. Как я могу полностью удалить все библиотеки (а также easy_install и т. Д.) И переустановить? – Skyler 2 January 2013 в 11:14
  • 3
    Это звучит многообещающе, но на странице, на которую вы ссылаетесь, обсуждается установка Python modules , а не базовая система. Как бы вы установили целое Python2.7 в /opt/py27, как вы упомянули? Мне кажется, что путаница происходит главным образом потому, что каждая версия / флейта Python хочет установить свои собственные бинарные файлы (python, pip, easy_install) с одинаковыми именами и в в том же месте, что и другие версии / ароматы. – jez 17 December 2015 в 19:49

Вот еще одно отличное решение для управления различными версиями python:

https://github.com/pyenv/pyenv

(я уже предоставил ответьте здесь, но решили опубликовать это как дополнительный или альтернативный ответ)

5
ответ дан jersey bean 19 August 2018 в 06:51
поделиться
6
ответ дан jersey bean 30 October 2018 в 18:57
поделиться
Другие вопросы по тегам:

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