pyenv install -l 這指令,大致做下面幾件事情:
- 呼叫 .pyenv/plugins/python-build/bin/pyenv-install
- pyenv-install 又呼叫 .pyenv/plugins/python-build/bin/python-build --definitions
- python-build --definitions 實際上是把 .pyenv/plugins/python-build/share/python-build 下的資料夾都列出來
這樣子,pyenv install -l 就會列出 ironpython-2.7.5,而且也可以下載安裝。
安裝 2.7.5 以後,用 pyenv shell ironpython-2.7.5 切換為 IronPython 2.7.5。
依照 2.7.5 的 release note 裡去執行 python -X:Frames -m ensurepip 時,卻出現以下的錯誤:
OSError: IronPython.Runtime.Exceptions.OSException: cannot load library at IronPython.Modules.CTypes.LoadLibrary (System.String library, Int32 mode) [0x00000] in會有這樣的錯誤,最主要是因為 ironpython-2.7.5/bin/Lib/ctypes/__init__.py 裡的 436~441 行,這裡是這樣寫的::0 at IronPython.Modules.CTypes.dlopen (System.String library, Int32 mode) [0x00000] in :0 at Microsoft.Scripting.Interpreter.FuncCallInstruction`3[System.String,System.Int32,System.Object].Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) [0x00000] in :0 at Microsoft.Scripting.Interpreter.Interpreter.Run (Microsoft.Scripting.Interpreter.InterpretedFrame frame) [0x00000] in :0
if _os.name in ("nt", "ce"):
pythonapi = PyDLL("python dll", None, _sys.dllhandle)
elif _sys.platform == "cygwin":
pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2])
else:
pythonapi = PyDLL(None)
這邊傳了 None 到 PyDLL,而 PyDLL 裡 (就 353 行) 的 _dlopen() 無法開啟 None ,才丟出這個 exception,有試著加程式處理掉這個 exception,但是,後續會因為這行
memmove = CFUNCTYPE(c_void_p, c_void_p, c_void_p, c_size_t)(_memmove_addr) 而出現 SystemError: LocalAlloc 錯誤
結論,Linux 下,IronPython 還是沒辦法用 pip ,另外就是,我不知道現在修正了沒。
沒有留言:
張貼留言