iT邦幫忙

0

Julia + VSCode 路徑編碼造成無法啟動

  • 分享至 

  • xImage

這幾天嘗試在新的 Windows 電腦上灌 Julia 跟其 VSCode 環境,結果怎樣都跑不起來
於是嘗試了可能有五天多,發現:

  1. 把 Julia 安裝的位置改成沒有中文的地方就可以 run 起來,但 VSCode 的 extension 造成 Julia language server 跑不起來 ── 也連帶造成 jupyter notebook 也跑不起來
  2. 新創一個沒有中文的使用者名稱,結果就都正常了(至少 notebook 跟一般 julia 都跑得起來)
  3. 原本 Julia run 不起來的問題是抓不到 sys.dll 的位置,然後它會從我的 powershell 當下路徑去抓相對 lib/julia 之類的,可是這樣不太合理(應該要是什麼類似 $SYSTEM_JULIA_PATH/lib/julia 之類的,我猜就是因為前面有中文讓它斷掉了)。此問題在全英數使用者名稱不會出現
  4. 就算 Julia 安裝在全英文路徑上(使用者名稱是中文)因此可以跑起來了,但 VSCode 的套件依然無法跑起來,造成 notebook 無法執行。其 error log 如下,為了避免個資問題我把我的名字換成「我的名字」中文(原來是我的中文名字)
  Activating project at `c:\Users\我的名字\.vscode\extensions\julialang.language-julia-1.48.1\scripts\environments\languageserver\v1.9`
[ Info: Starting the Julia Language Server
ERROR: failed to emit output file �b�h�줸�ժ��ت��r�X�����A�S���o�� Unicode �r���i�H�����쪺�r���C

fatal: error thrown and no exception handler available.
ErrorException("cannot open system image file "c:\Users\?的名�\AppData\Roaming\Code\User\globalStorage\julialang.language-julia\lsdepot\v1\compiled\v1.9\JSON\jl_4322.tmp" for writing")
ijl_errorf at C:/workdir/src\rtutils.c:77
ijl_write_compiler_output at C:/workdir/src\precompile.c:143
ijl_atexit_hook at C:/workdir/src\init.c:258
jl_repl_entrypoint at C:/workdir/src\jlapi.c:718
mainCRTStartup at C:/workdir/cli\loader_exe.c:59
BaseThreadInitThunk at C:\Windows\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\Windows\SYSTEM32\ntdll.dll (unknown line)
ERROR: LoadError: Failed to precompile JSON [682c06a0-de6a-54ab-a142-c8b1cf79cde6] to "c:\\Users\\我的名字\\AppData\\Roaming\\Code\\User\\globalStorage\\julialang.language-julia\\lsdepot\\v1\\compiled\\v1.9\\JSON\\jl_4322.tmp".
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base .\loading.jl:2300
  [3] compilecache
    @ .\loading.jl:2167 [inlined]
  [4] _require(pkg::Base.PkgId, env::String)
    @ Base .\loading.jl:1805
  [5] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base .\loading.jl:1660
  [6] macro expansion
    @ .\loading.jl:1648 [inlined]
  [7] macro expansion
    @ .\lock.jl:267 [inlined]
  [8] require(into::Module, mod::Symbol)
    @ Base .\loading.jl:1611
  [9] include
    @ .\Base.jl:457 [inlined]
 [10] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base .\loading.jl:2049
 [11] top-level scope
    @ stdin:3
in expression starting at c:\Users\我的名字\.vscode\extensions\julialang.language-julia-1.48.1\scripts\packages\LanguageServer\src\LanguageServer.jl:1
in expression starting at stdin:3


The Language Server failed to precompile.
Please make sure you have permissions to write to the LS depot path at
	c:\Users\我的名字\AppData\Roaming\Code\User\globalStorage\julialang.language-julia\lsdepot\v1

┌ Error: Some Julia code in the VS Code extension crashed
└ @ Main c:\Users\我的名字\.vscode\extensions\julialang.language-julia-1.48.1\scripts\error_handler.jl:15
ERROR: Failed to precompile LanguageServer [2b0e0bc5-e4fd-59b4-8912-456d1b03d8d7] to "c:\\Users\\我的名字\\AppData\\Roaming\\Code\\User\\globalStorage\\julialang.language-julia\\lsdepot\\v1\\compiled\\v1.9\\LanguageServer\\jl_41DA.tmp".
Stacktrace:
 [1] top-level scope
   @ c:\Users\我的名字\.vscode\extensions\julialang.language-julia-1.48.1\scripts\languageserver\main.jl:77
 [2] include(mod::Module, _path::String)
   @ Base .\Base.jl:457

雖然我知道程式盡量要避免中文路徑,但我其他 work 都已經在電腦上了不方便直接大改。而且目前 Python 等其他程式都沒遇到這種問題,我不可能捨本逐末,還是希望根本性的解決問題。
就我知道的 Julia 的程式跟 Python 不一樣都是 compile 出來的,請問各位如果遇到這種路徑問題是否能夠去重新編譯 Julia 的程式讓路徑不要因為編碼斷掉或顯示錯誤的之類呢?(Julia 號稱程式內都已經可以支援 unicode 跟 latex 領先其他語言了,在這種地方如果沒辦法解決似乎有點說不過去 Q_Q)
懇求各位大佬們了 <(_ _)> 感激不盡

是說如果會遇到這種問題一開始就跟 Mac 一樣強制把使用者名稱轉英文不就好了,不要人家驗機把我取中文名現在才出這種事;Mac 中文名字資料夾還是英文啊,而且 unix-like shell 要 debug 好 de 多了……要不是我沒錢只能買 Windows T_T

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-08-01 08:14:08 檢舉
回報給julia官方社群啊,這看起來就是julia本身是ascii程式而非像python3、go的完全是unicode程式導致的。或許有編譯選項,可以去問。
再不行用WSL+docker編譯試試。

說真的,身為一個近年出生的語言,很難想像還會有這種狀況發生。
jeffeux iT邦新手 4 級 ‧ 2023-08-01 23:44:57 檢舉
我就是這麼覺得 :'(
我目前用 WSL 有解決掉這個問題,問題是 WSL 沒有 GUI 沒辦法 reproduce 我在幫的人遇到的狀況
而 Windows 因為是一個月內剛換,所以最近才 trace 到這個進度(一度以為是編譯器壞掉什麼),之前都用 Mac
obarisk iT邦研究生 2 級 ‧ 2023-08-02 09:32:01 檢舉
八成是windows的問題
windows 的 cmd 不支持 utf8
jeffeux iT邦新手 4 級 ‧ 2023-08-03 10:42:32 檢舉
不過我用的是 Powershell?還有 Cygwin 跟 MINGW 都盡量試了,目前還是只有 WSL 比較 OK 但就慢
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2023-08-01 08:41:05

可以去Julia Taiwan
應該比較快得到正解

Julia Taiwan 發起人杜岳華先生

jeffeux iT邦新手 4 級 ‧ 2023-08-01 23:42:36 檢舉

對耶謝謝您
我都忘記我有在社團裡面了 XD

jeffeux iT邦新手 4 級 ‧ 2023-08-01 23:45:23 檢舉

不過為什麼現在裡面好多廣告?

我要發表回答

立即登入回答