Environment
這邊我跟官方文件的編排順序不同,先來介紹我覺得這次改版中最重要的部分: Environment。
在新的套件管理系統裡,導入了 Environment 這個概念。我個人最熟悉的語言是 Python,所以以 Python 開發者來說,最相近的工具就是 virtualenv
,在 Pkg(3)
裡你可以在不同的“環境”下切換來進行開發,就如同在 Python 裡你藉由 activate 不同的 virtual environment 去隔離不同的開發環境。
具體來說,在 julia v1.0
裡大概是這樣操作的:
mkdir <env_dir>
:建造一個做為Pkg(3)
維護套件相關檔案的資料夾。- 進入
julia
REPL:一般來說就是在 terminal 裡執行julia
,但這視乎你是如何安裝julia
的。 - 在
julia
REPL 裡輸入]
進入pkg
模式。 - 執行
activate <env_dir>
來啟用 environment 。
這個是在我的 Mac 上執行的狀況:
啟用之後又怎樣呢?啟用之後會影響到 using
與 import
解析套件的路徑,也就是說若你在 env1
裡裝了 CSV
這個套件,但卻沒有在 env2
裡安裝 CSV
套件,當你切換到 env2
時如果 import CSV
就會有 import error 。
套件管理
到這個階段,你就可以在不同的環境下管理套件的相依性問題 (package dependencies)。具體來說就是加入 (Add)、移除 (Remove)、開發 (Dev) 與升級 (Update/Upgrade)。
以下操作都是預設已經啟用一個環境並進入 pkg
模式後執行。
加入套件 (Add)
譬如說,如果要在 MyEnv1
中加入 CSV
與 DataFrames
這兩個套件的話,只需要在 pkg
模式中使用 add
指令即可:
這時如果我們用 status
指令就能知道目前 MyEnv1
中到底安裝了什麼:
移除套件 (Remove)
相反的,如果要移除一個套件,可以使用 rm
這個指令:
需要注意的是,官方文件中有提及,在移除一個套件的同時也會移除所有需要這個套件的其它套件。
開發模式 (Dev)
在開發套件時,有時會發生一種狀況:出 bug 的 code 是別人寫的啊!這時你就希望快速修好 bug 之後繼續自己的開發,也就是說你修改了別人的 code 之後,你希望這個修改會馬上反映在你的程式裡。
在 Python 裡的話,這個叫做 develop mode ,基本上就是執行 python setup.py develop
這個指令,但今天重點是 julia
,有關 Python 的套件開發就先不提了。
在 pkg
模式裡,只需要使用 dev
這個指令即可:
--local
只是說讓 CSV
安裝在現在的環境資料夾裡而已。
這時你會發現環境資料夾中出現了一個 dev
資料夾:
這時無論你在 dev/CSV
裡修改了什麼,只要 import CSV
之後就會直接生效。在這裡我隨便加個 sayhello
看看吧:
執行看看:
看到沒?我新寫的 sayhello
就變成 CSV
套件下的一個函數了。
更新升級 (Update/Upgrade)
要升級套件,也是非常簡單,只需要執行 up
即可:
與編輯器的整合
老實說,還不是太好 XD
VSCode
我自己是很喜歡用 VSCode 寫東西。大致上來說用 VSCode 寫 julia
還算愜意,可以很簡單的做 code navigation ,像是直接跳到函數、型別之類定義的原始檔等等都很容易,但僅限全域環境。
也就是說,如果你是像上面教學的那樣創建一個獨立的環境再安裝套件,雖然說你可以用 Cmd+Shift+P
並搜尋 Julia: Change Current Environment
:
雖說可以把環境切換到你創建的環境資料夾下,但是頂多就是游標滑到相關物件時會跳出一個協助視窗顯示文件之類的內容,但如果不是安裝在全域環境的套件,跳到定義原始碼之類的功能就還沒有作用。
詳情的話,可以看這個 GitHub issue 。
Juno
號稱是官方支援的編輯器,但是跟 VSCode 還是有一樣的問題啊啊!(崩潰) 至於其他花俏的功能我其實都還不是很喜歡呢 ( = wwww = )。
所以目前來說,我知道可以寫 julia
的編輯器都還沒有對新的套件管理系統有很好的支援。現在我也就是先用一些方法代替這些跳到定義之類的跳到定義之類的功能。
其中我發現還不錯用的是 less
跟 @less
。
譬如說 @less DataFrames.DataFrame()
就會看到:
雖然說這樣可以很快找到原始碼在哪裡,但還是不是很方便啊…
希望別人趕快修好這個功能 (不是應該自己寫嗎 = =)
結語
今天就先簡單介紹一下在 Pkg(3)
裡引入的新概念 Environment 。其實在其他語言裡很早就有類似的功能了,而且試了一些編輯器之後發現,好像都還沒有跟新的套件管理系統整合得很好。
雖說有些 workaround 可以用,但還是不是很方便,尤其是在追開源套件程式碼時。但新語言嘛,一切還是在進化當中,也確實變得越來越好了,至少比我當初在 v0.3
時比起來好太多了 XDDD
下面我列了我在寫這篇時參考覺得很不錯的資源,有興趣的人建議是全部看過一遍。其中最重要的當然就是官方文件啦!
下次有機會再介紹 julia
套件開發的流程吧。Happy Julia Programming !