IPython บน Windows ไม่สามารถนำเข้า geopandas
ฉันได้รับไฟล์
ImportError: การโหลด DLL ล้มเหลว: ไม่พบโพรซีเดอร์ที่ระบุ
เกิดข้อผิดพลาดขณะพยายามนำเข้า geopandas ใน python 3.6 โดยเฉพาะฉันได้รับข้อผิดพลาดเมื่อใช้ ipython แต่ไม่ใช่เมื่อใช้ python นอกจากนี้สิ่งนี้มีผลต่อ Windows (เครื่องเสมือน Windows Server 2016) ไม่ใช่ Linux ฉันพบโพสต์ก่อนหน้านี้สองสามรายการเกี่ยวกับเรื่องนี้หรือปัญหาที่คล้ายกันมาก แต่ฉันปฏิเสธความเหมาะสมเนื่องจากไม่สามารถแก้ไขปัญหาได้อย่างชัดเจนหรือไม่ก็รวมเข้ากับการติดตั้ง pip
นี้ POS T จากเกือบสองปีที่ผ่านมาเช่นการรายงานข้อผิดพลาดที่คล้ายกัน แต่จบลงด้วยการ“ไม่เป็นไรผมไม่ pip ติดตั้งของ geopandas”
โพสต์นี้เมื่อสองสามปีก่อนมีคำตอบที่เป็นที่ยอมรับแม้ว่าผู้โพสต์ต้นฉบับจะแสดงความคิดเห็นว่ามันไม่ได้ผลสำหรับพวกเขา! มีการกล่าวถึงบล็อกโพสต์จาก Geoff Boeing ที่ฉันเคยเห็นมาก่อนว่าเป็นวิธีการทำงานแม้ว่าบล็อกโพสต์นั้นจะให้แนวทางมากกว่าหนึ่งวิธี (การติดตั้ง conda และลำดับขั้นตอนด้วยตนเองเพิ่มเติม) และความคิดเห็นไม่ได้ชี้แจงว่าอะไรได้ผล สำหรับพวกเขา.
มีโพสต์นี้เมื่อเกือบสองปีครึ่งที่ผ่านมาซึ่งเชื่อมโยงวิธีการติดตั้ง conda และ pip และไม่มีคำตอบที่ยอมรับ มีข้อเสนอแนะในความคิดเห็นว่าสำหรับผู้แสดงความคิดเห็นมันเป็นปัญหาเกี่ยวกับ gdal บน conda-forge มีคำตอบที่อ้างถึงบล็อกโพสต์ของ Geoff Boeing อีกครั้ง ความหมายอาจเป็นไปได้ว่าการติดตั้ง gdal ผ่าน conda อาจเป็นปัญหาได้และหากเป็นเช่นนั้นจำเป็นต้องมีลำดับขั้นตอนด้วยตนเอง ฉันไม่ได้ชักชวนนี่เป็นปัญหาของฉัน
ปัญหาของฉันเกิดขึ้นโดยเฉพาะบนเครื่องเสมือน Windows Server 2016 และเมื่อระบุเฉพาะช่องสัญญาณ conda-forge นอกจากนี้โดยเฉพาะอย่างยิ่งมันเกิดขึ้นใน ipython เท่านั้น (และด้วยเหตุนี้สมุดบันทึก Jupyter) และไม่อยู่ใน python ดังนั้น:
สร้างสภาพแวดล้อมที่ระบุช่องสัญญาณเริ่มต้นของ conda โดยระบุ python 3.6, ipython และ geopandas:
conda create -n test36_defaults -c defaults python=3.6 ipython geopandas
เปิดใช้งานสภาพแวดล้อมนั้น:
(test36_2) C:\Users\guy.maskall>conda activate test36_defaults
เปิดเคอร์เนล ipython และนำเข้า geopandas:
(test36_defaults) C:\Users\guy.maskall>ipython
Python 3.6.12 |Anaconda, Inc.| (default, Sep 9 2020, 00:29:25) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import geopandas as gpd
In [2]:
Do you really want to exit ([y]/n)?
นำเข้าไม่เป็นไร
ในทำนองเดียวกันให้ยิงล่ามหลามตรง:
(test36_defaults) C:\Users\guy.maskall>python
Python 3.6.12 |Anaconda, Inc.| (default, Sep 9 2020, 00:29:25) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import geopandas as gpd
>>>
ที่นำเข้าโอเคเช่นกัน.
ตอนนี้สร้างสภาพแวดล้อมอื่นที่ระบุ conda-forge เท่านั้น:
conda create -n test36_cforge -c conda-forge python=3.6 ipython geopandas
เปิดใช้งานสภาพแวดล้อมและโหลด ipython อีกครั้งเพื่อนำเข้า geopandas:
(test36_cforge) C:\Users\guy.maskall>ipython
Python 3.6.11 (default, Aug 5 2020, 19:41:03) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import geopandas as gpd
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-a62d01c1d62e> in <module>()
----> 1 import geopandas as gpd
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\geopandas\__init__.py in <module>()
5 from geopandas.array import points_from_xy # noqa
6
----> 7 from geopandas.io.file import _read_file as read_file # noqa
8 from geopandas.io.arrow import _read_parquet as read_parquet # noqa
9 from geopandas.io.arrow import _read_feather as read_feather # noqa
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\geopandas\io\file.py in <module>()
5 import pandas as pd
6
----> 7 import fiona
8 import pyproj
9 from shapely.geometry import mapping
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__init__.py in <module>()
84 import fiona._loading
85 with fiona._loading.add_gdal_dll_directories():
---> 86 from fiona.collection import BytesCollection, Collection
87 from fiona.drvsupport import supported_drivers
88 from fiona.env import ensure_env_with_credentials, Env
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\collection.py in <module>()
9 with fiona._loading.add_gdal_dll_directories():
10 from fiona import compat, vfs
---> 11 from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
12 from fiona.ogrext import Session, WritingSession
13 from fiona.ogrext import buffer_to_virtual_file, remove_virtual_file, GEOMETRY_TYPES
ImportError: DLL load failed: The specified procedure could not be found.
In [2]:
Do you really want to exit ([y]/n)?
ดังนั้นจึงล้มเหลวใน ipython ตอนนี้ลองใช้เพียง python ตรง:
(test36_cforge) C:\Users\guy.maskall>python
Python 3.6.11 (default, Aug 5 2020, 19:41:03) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import geopandas as gpd
>>>
ที่ได้ผล
หนึ่งในคำตอบในโพสต์ SO ข้างต้นเน้น GDAL, Fiona, pyproj, rtree และหุ่นดี เมื่อเปรียบเทียบผลลัพธ์ของconda listระหว่างสองสภาพแวดล้อมข้างต้นฉันได้เวอร์ชันเดียวกันทั้งหมด ทั้งหมดยกเว้น rtree ยังมีโครงสร้างเดียวกัน ดังนั้นฉันมี:
gdal 3.1.4 py36h214b664_0 conda-forge
fiona 1.8.17 py36hdef4c2b_1 conda-forge
pyproj 2.6.1.post1 py36hfcef96e_3 conda-forge
shapely 1.7.1 py36h6dc46f0_1 conda-forge
และ
rtree 0.9.4 py36h9a6d676_1 conda-forge
(เกี่ยวข้องกับ env ที่ไม่ทำงาน) เทียบกับ
rtree 0.9.4 py36h21ff451_1
(ใน env ที่ใช้งานได้)
สิ่งที่ค่อนข้างทำให้ฉันสับสนคือแม้จะมีบางโพสต์ที่แสดงถึง gdal และผลลัพธ์ข้อผิดพลาดของฉันที่อยู่เหนือการโหลด fiona gdal โดยนัย (ฉันคิดว่า) สภาพแวดล้อมทั้งสองดูเหมือนจะมีเวอร์ชันเดียวกันและสร้าง gdal และ fiona และข้อผิดพลาดจะเกิดขึ้นใน ipython เท่านั้น เคอร์เนลและไม่อยู่ใน python
เป็นสิ่งสำคัญสำหรับฉันที่จะสามารถจำลองสภาพแวดล้อมได้อย่างง่ายดายดังนั้น conda จึงเป็นที่ต้องการ ฉันมีข้อกำหนดอื่นนอกเหนือจากการโหลด geopandas ตัวอย่างเช่นฉันใช้ datacube ซึ่งแนะนำ python 3.6 ก่อนหน้านี้ฉันใช้งาน Python เวอร์ชันที่สูงกว่าและฉันต้องการให้สภาพแวดล้อม python 3.6 ทำงานได้ดีขึ้นเพื่อที่ฉันจะได้ดูว่าสามารถแก้ปัญหาอื่นที่ฉันพบได้หรือไม่ ฉันต้องการ จำกัด สิ่งที่ทำให้เกิดข้อผิดพลาดนี้ให้แคบลงเนื่องจากฉันต้องการสามารถแก้ไข conda env yaml ของฉันได้อย่างง่ายดายเพื่อลองสภาพแวดล้อมที่แตกต่างกันและฉันอาจต้องระบุหลายช่องทางเนื่องจากผู้ต้องสงสัยรายหนึ่ง (สำหรับปัญหาอื่น) คือ prompt-toolkit ซึ่งดูเหมือนจะมีเฉพาะในเวอร์ชันที่ต่ำกว่า 3 จากช่อง esrf-bcu แต่นั่นเป็นอีกเรื่องหนึ่ง
ใครก็ได้ช่วยชี้ไปที
- อะไรคือแพคเกจ / เวอร์ชัน / บิลด์ที่อาจทำให้เกิดสิ่งนี้?
- เหตุใดบนโลกแม้ในสภาพแวดล้อมที่มีปัญหาจึงส่งผลกระทบต่อ ipython เท่านั้น?
มีความแตกต่างเล็กน้อยในเวอร์ชัน python (3.6.11 ล้มเหลวโดยประสบความสำเร็จ 3.6.12) และนั่นคือสิ่งที่ฉันสามารถสำรวจได้ แต่ก็ยังทิ้งคำถามไว้ว่าทำไมความแตกต่างระหว่าง ipython กับ python
ในข่าวอื่น ๆ ฉันเกลียด Windows
การนำเข้าฟิโอน่าและเส้นทาง DLL
อัปเดต 2020/11/02 เนื่องจากข้อผิดพลาดดูเหมือนจะอยู่ตรงกลางของฟิโอน่าฉันจึงต้มมันลงไปแค่นั้น ใน anaconda prompt shell ฉันวิ่งset PYTHONVERBOSE=1แล้วโหลด ipython และพยายามนำเข้า fiona:
In [1]: import fiona
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\__init__.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__init__.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\__init__.cpython-36.pyc'
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\_loading.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\_loading.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\_loading.cpython-36.pyc'
import 'fiona._loading' # <_frozen_importlib_external.SourceFileLoader object at 0x0000020344DC0C88>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\__pycache__\socket.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\socket.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\__pycache__\\socket.cpython-36.pyc'
# extension module '_socket' loaded from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\DLLs\\_socket.pyd'
# extension module '_socket' executed from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\DLLs\\_socket.pyd'
import '_socket' # <_frozen_importlib_external.ExtensionFileLoader object at 0x0000020344DCED30>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\__pycache__\selectors.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\selectors.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\__pycache__\\selectors.cpython-36.pyc'
import 'selectors' # <_frozen_importlib_external.SourceFileLoader object at 0x0000020344DD9358>
import 'socket' # <_frozen_importlib_external.SourceFileLoader object at 0x0000020344DCE198>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\collection.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\collection.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\collection.cpython-36.pyc'
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\compat.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\compat.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\compat.cpython-36.pyc'
import 'fiona.compat' # <_frozen_importlib_external.SourceFileLoader object at 0x0000020344DE76D8>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\vfs.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\vfs.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\vfs.cpython-36.pyc'
import 'fiona.vfs' # <_frozen_importlib_external.SourceFileLoader object at 0x0000020344DE7780>
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-4c762272c079> in <module>()
----> 1 import fiona
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _load_unlocked(spec)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap_external.py in exec_module(self, module)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _call_with_frames_removed(f, *args, **kwds)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__init__.py in <module>()
84 import fiona._loading
85 with fiona._loading.add_gdal_dll_directories():
---> 86 from fiona.collection import BytesCollection, Collection
87 from fiona.drvsupport import supported_drivers
88 from fiona.env import ensure_env_with_credentials, Env
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _load_unlocked(spec)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap_external.py in exec_module(self, module)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _call_with_frames_removed(f, *args, **kwds)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\collection.py in <module>()
9 with fiona._loading.add_gdal_dll_directories():
10 from fiona import compat, vfs
---> 11 from fiona.ogrext import Iterator, ItemsIterator, KeysIterator
12 from fiona.ogrext import Session, WritingSession
13 from fiona.ogrext import buffer_to_virtual_file, remove_virtual_file, GEOMETRY_TYPES
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _load_unlocked(spec)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in module_from_spec(spec)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap_external.py in create_module(self, spec)
C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\importlib\_bootstrap.py in _call_with_frames_removed(f, *args, **kwds)
ImportError: DLL load failed: The specified procedure could not be found.
แต่จากนั้นออกจาก ipython และยิง python ตรงและพยายามนำเข้า fiona ฉันได้รับผลผลิตเพิ่มขึ้นอีกหนึ่งตัน (ช่วยคุณได้ทั้งหมด แต่มุ่งเน้นไปที่บิตที่ดูเหมือนว่า ipython จะประกันตัวออกไป):
...
import 'fiona.compat' # <_frozen_importlib_external.SourceFileLoader object at 0x00000289AC978470>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\vfs.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\vfs.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\vfs.cpython-36.pyc'
import 'fiona.vfs' # <_frozen_importlib_external.SourceFileLoader object at 0x00000289AC997550>
# extension module 'fiona.ogrext' loaded from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\ogrext.cp36-win_amd64.pyd'
# extension module 'fiona._geometry' loaded from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\_geometry.cp36-win_amd64.pyd'
# extension module 'fiona._err' loaded from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\_err.cp36-win_amd64.pyd'
# extension module 'fiona._err' executed from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\_err.cp36-win_amd64.pyd'
import 'fiona._err' # <_frozen_importlib_external.ExtensionFileLoader object at 0x00000289AC9EE7F0>
# C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\__pycache__\errors.cpython-36.pyc matches C:\Users\guy.maskall\anaconda3\envs\test36_cforge\lib\site-packages\fiona\errors.py
# code object from 'C:\\Users\\guy.maskall\\anaconda3\\envs\\test36_cforge\\lib\\site-packages\\fiona\\__pycache__\\errors.cpython-36.pyc'
import 'fiona.errors' # <_frozen_importlib_external.SourceFileLoader object at 0x00000289AC9EEFD0>
...
นี่คือการดำดิ่งสู่ความกล้าที่ฉันไม่คุ้นเคยจริงๆ! แต่ดูเหมือนว่าฉันสามารถพูดได้อย่างปลอดภัยบางอย่าง:
- ทั้ง ipython และ python นำเข้าจากเส้นทางเดียวกัน (ตามที่คุณหวัง)
- หลังจากจุดที่ ipython bails python รายงาน / ความคิดเห็นเกี่ยวกับโมดูลส่วนขยาย fiona.ogrext ถูกโหลดซึ่งเป็นข้อผิดพลาดสุดท้ายที่รายงานในการย้อนกลับ
- นอกจากนี้ข้อผิดพลาดนั้นอยู่ในบริบทของ fiona._loading.add_gdal_dll_directories () ซึ่งแนะนำว่าเป็นสิ่งที่ต้องทำกับเส้นทาง DLL
แต่อีกครั้งที่ฉันต้องถามอีกครั้งว่าทำไมฟังก์ชันนี้หรือการค้นหา DLL จึงทำงานแตกต่างกันใน ipython เมื่อเทียบกับ python
นอกจากนี้ฉันได้ตรวจสอบแล้วว่าฉันเห็นพฤติกรรมเดียวกันนี้ใน Windows 10 Pro เวอร์ชัน 2004
คำตอบ
ปัญหาการนำเข้าที่เฉพาะเจาะจงได้รับการแก้ไขโดยการระบุ python 3.6.12 จาก 3.6.11 ดังนั้น:
conda create -n test36_12_cforge -c conda-forge python=3.6.12 ipython geopandas
(test36_12_cforge) C:\Users\guy.maskall>ipython
Python 3.6.12 |Anaconda, Inc.| (default, Sep 9 2020, 00:29:25) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import geopandas as gpd
In [2]:
Do you really want to exit ([y]/n)?
(test36_12_cforge) C:\Users\guy.maskall>ipython
Python 3.6.12 |Anaconda, Inc.| (default, Sep 9 2020, 00:29:25) [MSC v.1916 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import fiona
In [2]:
Do you really want to exit ([y]/n)?
ฉันลังเลที่จะยอมรับคำตอบของตัวเอง สำหรับเบียร์ถ้าเราเคยพบใครสามารถอธิบายได้ว่าทำไมถึงมีพฤติกรรมที่แตกต่างกันขึ้นอยู่กับว่าการนำเข้านั้นทำจาก ipython vs python หรือไม่?