Скрипт базовой карты Python запускается с командной подсказкой Anaconda, но не с VS Code

#python #visual-studio-code #anaconda #matplotlib-basemap

#python #visual-studio-code #anaconda #matplotlib-базовая карта

Вопрос:

Я запускаю пример сценария для базовой карты python. Вот сценарий:

 import sys
print("Running on = ", sys.executable)
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# setup lambert azimuthal equal area basemap.
# lat_ts is latitude of true scale.
# lon_0,lat_0 is central point.
m = Basemap(width=12000000,height=8000000,
            resolution='l',projection='laea',
            lat_ts=50,lat_0=50,lon_0=-107.)
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-80.,81.,20.))
m.drawmeridians(np.arange(-180.,181.,20.))
m.drawmapboundary(fill_color='aqua') 
# draw tissot's indicatrix to show distortion.
ax = plt.gca()
for y in np.linspace(m.ymax/20,19*m.ymax/20,9):
    for x in np.linspace(m.xmax/20,19*m.xmax/20,12):
        lon, lat = m(x,y,inverse=True)
        poly = m.tissot(lon,lat,1.5,100,
                        facecolor='green',zorder=10,alpha=0.5)
plt.title("Lambert Azimuthal Equal Area Projection")
plt.show()
  

Я запускаю его, вызывая его из командной строки Anaconda в среде «базовая карта», и он работает:
введите описание изображения здесь

Теперь я запускаю тот же скрипт из Visual Studio Code в той же среде, и ему не удается импортировать: введите описание изображения здесь

В чем может быть проблема? Что-нибудь еще, что я должен проверить, кроме среды?

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

1. Какую версию модуля «pyproj» вы используете? Согласно предоставленному вами коду, я могу запустить его в VSCode, а версия «pyproj», которую я использовал, — 1.9.6.

2. Версия в pip list команде: pyproj==2.6.1.post1

3. Я попытался использовать «pyproj == 2.6.1.post1», он также может запускаться. Какие номера версий модулей «matplotlib» и «basemap» вы используете? Номер версии модуля «matplotlib», который я использую, равен 3.1.0, а базовая карта — 1.2.0. Кроме того, рекомендуется попробовать переустановить модуль «базовая карта» в текущей среде conda.

4. Я попытался создать новую среду с вашей конфигурацией, теперь ошибка импорта другая: File "C:...mpl_toolkitsbasemap__init__.py", line 48, in <module> import _geoslib ImportError: DLL load failed: The specified module could not be found. . Это в VS Code. Когда я пытаюсь запустить его, вызвав из командной строки Anaconda, он снова работает. Я не понимаю, что не так с моей Visual Studio…

Ответ №1:

Согласно предоставленной вами информации о консоли, причина в том, что консоль терминала не входит в среду conda. Вы можете использовать следующие два метода для ее решения:

  1. Используйте другие консоли терминала в VSCode. « Ctrl Shift p «,» Terminal:Select Default Shell «, « Command Prompt «, откройте новую консоль терминала, она автоматически активируется и войдет в среду conda.

    введите описание изображения здесь

  2. Используйте команду « conda init powershell » на консоли для инициализации conda.

    Снова откройте консоль powershell (сочетание клавиш: Ctrl Shift `), powershell автоматически активируется и переходит в среду conda.

    введите описание изображения здесь

Примечание:

  1. когда я использую метод 2, консоль powershell выдает другую ошибку: « pyproj_datadir = os.environ['PROJ_LIB'] KeyError:'PROJ_LIB' «. Способ, которым я это исправляю: используйте « conda install -c conda-forge proj4 » для установки proj4.

  2. При возникновении

 from matplotlib.cbook import dedent
ImportError: cannot import name 'dedent' from 'matplotlib.cbook' (D:Users...Anaconda3envsbasemaplibsite-packagesmatplotlibcbook__init__.py)
  

что означает, что « matplotlib «версия несовместима, пожалуйста, используйте « conda install matplotlib==3.1 » для установки версии 3.1.

Ссылка: conda в powershell и KeyError ‘PROJ_LIB.

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

1. Я должен был сделать также conda install -c conda-forge matplotlib-base==3.1 . Спасибо, командная строка в VS Code решила эту проблему.