chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

由淺到深搭建遠(yuǎn)端容器開發(fā)環(huán)境

我快閉嘴 ? 來源:玩轉(zhuǎn)VS Code ? 作者:玩轉(zhuǎn)VS Code ? 2022-09-27 10:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言


使用C++作為主要開發(fā)語言的程序猿們應(yīng)該會(huì)認(rèn)同搭建開發(fā)環(huán)境是一件煩人的事情。為了編譯一個(gè)程序不僅需要下載各種依賴包,還可能面臨本地系統(tǒng)不兼容、編譯器版本不一致、包版本沖突等各種問題。筆者在運(yùn)營iLogtail開源社區(qū)的過程中發(fā)現(xiàn)開發(fā)和調(diào)試環(huán)境問題也是成員問的最多的問題之一,那么有沒有一種方法可以徹底解決這一問題呢?

有。容器技術(shù)使應(yīng)用在各種環(huán)境可以一鍵部署,一致執(zhí)行,同樣的原理也適用于開發(fā)環(huán)境部署。利用 VSCode 的 Remote-Development 插件就可以使整個(gè)開發(fā)環(huán)境運(yùn)行在遠(yuǎn)程容器中。使用這種方式不但可以直接使用一致的環(huán)境開發(fā)編譯,而且還自然實(shí)現(xiàn)了多個(gè)開發(fā)環(huán)境的隔離。下面讓就我們由淺到深搭建這樣的遠(yuǎn)端容器開發(fā)環(huán)境。

原理簡(jiǎn)介


為什么要遠(yuǎn)程+容器?遠(yuǎn)程解決的是開發(fā)機(jī)資源問題和代碼安全問題,本地電腦CPU和內(nèi)存比較有限,為了提高編譯、測(cè)試效率一般都會(huì)準(zhǔn)備一臺(tái)專門用于開發(fā)測(cè)試的機(jī)器,而部分公司為了防止代碼外泄,只允許內(nèi)部開發(fā)機(jī)訪問代碼庫。容器解決的是開發(fā)環(huán)境一致性問題。兩者結(jié)合起來便能構(gòu)建最理想的開發(fā)環(huán)境。

在使用 Remote-Development 插件時(shí),插件會(huì)ssh連接到遠(yuǎn)程開發(fā)機(jī),然后根據(jù)配置直接啟動(dòng)或是鑄造開發(fā)環(huán)境鏡像后啟動(dòng)開發(fā)環(huán)境容器。啟動(dòng)時(shí)將開發(fā)機(jī)的Workspace目錄作為源掛載到容器中。開發(fā)環(huán)境容器啟動(dòng)后,插件會(huì)自動(dòng)安裝VS Code Server,并安裝配置指定的VS Code插件。一旦容器內(nèi)的VS Code Server啟動(dòng)后,本地的VS Code就會(huì)直接與容器內(nèi)的VS Code Server建立通信。容器內(nèi)可以訪問Workspace所有文件,并且修改不會(huì)因容器退出而丟失。容器開發(fā)環(huán)境可以使用的VS Code插件,在Workspace的devcontainer.json配置中指定,下文會(huì)有詳細(xì)描述。

為了提高啟動(dòng)速度并保留容器內(nèi)插件的配置,開發(fā)容器內(nèi)的/vscode目錄其實(shí)掛載了一個(gè)docker volume,不會(huì)自動(dòng)隨docker退出而回收,因此從第二次連接容器開發(fā)環(huán)境開始,無需重新安裝VS Code Server、插件等,啟動(dòng)速度大大提高。

1a0fbaac-3df7-11ed-9e49-dac502259ad0.png

環(huán)境準(zhǔn)備

要使VS Code可以遠(yuǎn)程連接開發(fā)機(jī),最好使用ssh密鑰建立本地電腦和開發(fā)機(jī)的信任關(guān)系。要使用容器進(jìn)行開發(fā),開發(fā)機(jī)上必須安裝Docker。這兩步相關(guān)教程網(wǎng)上較多,在這里就不再贅述。

需要注意的是,要使VS Code通過ssh連上開發(fā)機(jī)并通過docker啟動(dòng)開發(fā)環(huán)境容器,建立信任關(guān)系的賬戶必須具備docker使用權(quán)限。如果使用root賬戶,那么自然具備。如果非root則可以使用任意一種方式使賬戶獲得docker使用權(quán)限:

  1. 將用戶加入docker組。參考Post-installation steps for Linux(https://docs.docker.com/engine/install/linux-postinstall)。
    sudo usermod -aG docker $USER

  2. 將docker.sock權(quán)限修改為777(不太推薦,除非上述方法無法奏效)。
    sudo chmod 777 /var/run/docker.sock

下面假設(shè)開發(fā)機(jī)使用的是Linux系統(tǒng),并且與本地電腦已經(jīng)建立好信任關(guān)系,而且安裝并具備Docker訪問權(quán)限。

安裝插件

在VS Code的Marketplace中搜索“Remote Development”安裝插件。

1a259020-3df7-11ed-9e49-dac502259ad0.png

安裝完成后,會(huì)發(fā)現(xiàn)多出了3個(gè)子插件。

  • Remote - Containers:連接容器開發(fā)

  • Remote - SSH:連接ssh遠(yuǎn)程開發(fā)

  • Remote - WSL:連接WSL(Windows Linux子系統(tǒng))開發(fā)

使用鏡像開發(fā)

使用 Remote Development 插件最直接的方式就是利用現(xiàn)成的編譯鏡像啟動(dòng)開發(fā)容器。這里以使用C++和Go語言編寫、依賴環(huán)境相對(duì)復(fù)雜的開源項(xiàng)目iLogtail數(shù)據(jù)采集器項(xiàng)目為例,說明如何利用 Remote Development 插件進(jìn)行遠(yuǎn)程容器開發(fā)。

1. 創(chuàng)建Remote Development配置

在iLogtail Workspace的頂層目錄創(chuàng)建.devcontainer目錄,并在里面創(chuàng)建devcontainer.json文件。

1a31e546-3df7-11ed-9e49-dac502259ad0.png

配置文件的內(nèi)容如下:

{  "image": "sls-opensource-registry.cn-shanghai.cr.aliyuncs.com/ilogtail-community-edition/ilogtail-build-linux:latest",  "customizations": {    "vscode": {      "extensions": [        "golang.Go",        "ms-vscode.cpptools-extension-pack"      ]    }  }}

其中,image字段是Remote Development插件啟動(dòng)開發(fā)環(huán)境的鏡像地址,customizations.vscode.extensions指定了開發(fā)環(huán)境的插件。部分插件介紹如下,開發(fā)者也可以按照自己的習(xí)慣進(jìn)行修改。

插件名

用途

golang.Go

Go開發(fā)必備插件

ms-vscode.cpptools-extension-pack

C++開發(fā)必備插件

2. 在容器中打開代碼庫

使用Shift + Command + P(Mac)或Ctrl + Shift + P(Win)打開命令面板,輸入reopen,選擇Remote-Containers: Reopen in Container

1a537d32-3df7-11ed-9e49-dac502259ad0.png

或者若出現(xiàn)如下圖提示,則可以直接點(diǎn)擊在容器中重新打開。

1a677da0-3df7-11ed-9e49-dac502259ad0.png

首次打開時(shí)會(huì)比較慢,因?yàn)橐螺d鏡像并安裝插件,后面再次打開時(shí)速度會(huì)很快。按照提示進(jìn)行鏡像Build。

完成上述步驟后,我們已經(jīng)可以使用VS Code進(jìn)行代碼編輯,并在其中進(jìn)行代碼編譯。

注:如果以前拉取過編譯鏡像,可能需要觸發(fā)Remote-Containers: Rebuild Container重新構(gòu)建。

3. 在容器中進(jìn)行開發(fā)

開發(fā)容器啟動(dòng)后,我們已經(jīng)可以在VS Code中瀏覽Workspace代碼了。但是隨便打開一個(gè)文件,滿眼都是錯(cuò)誤提示,代碼的跳轉(zhuǎn)功能也不能正常工作。這是因?yàn)镃++開發(fā)環(huán)境的includePath沒有被正確配置。

1a84db2a-3df7-11ed-9e49-dac502259ad0.png

打開命令面板,輸入C++ config,選擇C/C++: Edit Configurations(UI)。

1ab3965e-3df7-11ed-9e49-dac502259ad0.png

找到Include path,輸入鏡像內(nèi)依賴庫的路徑。

1ad62926-3df7-11ed-9e49-dac502259ad0.png

再回來看代碼時(shí),錯(cuò)誤提示都消失了,并且函數(shù)定義跳轉(zhuǎn)正常。

4. 在容器中進(jìn)行編譯

打開新Terminal(找不到的可以在命令面板中輸入Terminal,選擇新開一個(gè))

1b014b56-3df7-11ed-9e49-dac502259ad0.png

  • 編譯iLogtail Go插件

make vendor       # 若需要更新插件依賴庫
make plugin_local # 每次更新插件代碼后從這里開始

1b152fb8-3df7-11ed-9e49-dac502259ad0.png

  • 編譯iLogtail C++代碼

mkdir -p core/build # 若之前沒有建過cd core/buildcmake .. # 若增刪文件,修改CMakeLists.txt后需要重新執(zhí)行make -sj$(nproc)    # 每次更新core代碼后從這里開始

1b285142-3df7-11ed-9e49-dac502259ad0.png1b4aeb58-3df7-11ed-9e49-dac502259ad0.png

5. 獲取編譯產(chǎn)出

由于VS Code是直接將代碼庫目錄掛載到鏡像內(nèi)的,因此主機(jī)上可以直接訪問鏡像內(nèi)的編譯產(chǎn)出。

1b683b72-3df7-11ed-9e49-dac502259ad0.png

到這里,如果要求不高的話就可以結(jié)束了,但細(xì)心的讀者一定發(fā)現(xiàn)了一個(gè)問題,容器內(nèi)生成的文件在主機(jī)上都是root權(quán)限,必須執(zhí)行sudo chown -R $USER .進(jìn)行修復(fù)。如果社區(qū)的成員開發(fā)機(jī)沒有sudo權(quán)限怎么辦?作為iLogtail社區(qū)核心貢獻(xiàn)者,當(dāng)然不能把這樣的坑留給隊(duì)友了。

使用Dockerfile開發(fā)

那有沒有辦法做到容器內(nèi)權(quán)限自動(dòng)適配主機(jī)呢?這樣的問題當(dāng)然不會(huì)難倒VS Code了。Remote Development 插件支持使用 Dockerfile 在容器中進(jìn)行開發(fā),即在啟動(dòng)開發(fā)容器前先使用docker build一個(gè)開發(fā)鏡像,這給了修正容器內(nèi)賬戶權(quán)限的機(jī)會(huì)。

修正的原理如下:

  1. 在Remote Development 插件 docker build 前將開發(fā)機(jī)的賬戶名、賬戶ID、組名和組ID暴露給 docker。

  2. docker build時(shí)利用這些賬戶信息修正容器執(zhí)行賬戶和容器內(nèi)文件權(quán)限。

接下來我們進(jìn)行實(shí)際操作。

1. 修改.devcontainer.json配置文件

在配置文件中,將image部分修改為build部分,使用Dockerfile啟動(dòng)開發(fā)容器。同時(shí),加入initializeCommand,在build鏡像前,將賬戶信息暴露給docker。

{  "build": {    "dockerfile": "Dockerfile",    "args": {      "USERNAME": "${localEnv:USER}"    }  },  "initializeCommand": ".devcontainer/gen_env.sh",  "customizations": {    "vscode": {      "extensions": [        "golang.Go",        "ms-vscode.cpptools-extension-pack"      ]    }  }}

2. 創(chuàng)建Dockerfile

以編譯鏡像作為基礎(chǔ)鏡像,編寫Dockerfile對(duì)鏡像內(nèi)賬戶和文件權(quán)限進(jìn)行修正。

FROM sls-opensource-registry.cn-shanghai.cr.aliyuncs.com/ilogtail-community-edition/ilogtail-build-linux:latest
ARG USERNAME=adminUSER root
# Create the userCOPY .env /tmp/.envRUN source /tmp/.env && rm /tmp/.env;     if getent passwd $USERNAME; then userdel -f $USERNAME; fi;     if [ $HOST_OS = "Linux" ]; then     if getent group $GROUPNAME; then groupdel $GROUPNAME; fi;     groupadd --gid $GROUP_GID $GROUPNAME;     fi;     useradd --uid $USER_UID --gid $GROUP_GID -m $USERNAME;     echo $USERNAME ALL=(root) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME;     chmod 0440 /etc/sudoers.d/$USERNAME;     chown -R $USERNAME:$GROUPNAME /root/go /opt/logtail $(eval echo ~$USERNAME);     chmod 755 $(eval echo ~$USERNAME);
USER $USERNAME

COPY .env /tmp/.env將主機(jī)的賬戶信息通過文件形式復(fù)制到容器中。

接下來的幾行根據(jù)這些信息在容器內(nèi)創(chuàng)建對(duì)應(yīng)的賬戶。

echo $USERNAME ALL=(root) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME;授予該用戶sudo權(quán)限。

chmodchown的幾行對(duì)文件權(quán)限進(jìn)行修正,使新建的用戶有權(quán)限讀寫對(duì)應(yīng)目錄。其中對(duì)HOME(~$USERNAME)目錄的修正必須在這里進(jìn)行,否則會(huì)導(dǎo)致VS Code Sever沒有權(quán)限安裝,導(dǎo)致插件啟動(dòng)失敗。

3. 創(chuàng)建腳本暴露主機(jī)賬戶信息

gen_env.sh腳本內(nèi)容如下。該腳本對(duì)開發(fā)機(jī)為Mac系統(tǒng)也做了兼容。

set -ueset -o pipefail
if uname -s | grep Linux; then  echo -e "HOST_OS=Linux
USERNAME=$USER
USER_UID=$(id -u $USER)
GROUPNAME=$(id -gn $USER)
GROUP_GID=$(id -g $USER)" > .devcontainer/.env;else  echo "HOST_OS=Darwin
USERNAME=$USER
USER_UID=$(id -u $USER)
GROUPNAME=root
GROUP_GID=0" > .devcontainer/.env;  fi

前3步完成后,Workspace中的配置目錄應(yīng)該有這樣3個(gè)文件:

1b8a8c40-3df7-11ed-9e49-dac502259ad0.png

4. 運(yùn)行觀察效果

使用Shift + Command + P(Mac)或Ctrl + Shift + P(Win)打開命令面板,輸入reopen,選擇Remote-Containers: Rebuild Container。

1bb2d2cc-3df7-11ed-9e49-dac502259ad0.png

在容器內(nèi)重新執(zhí)行id命令查看賬戶信息,可以看到與開發(fā)機(jī)一致。

1bd57688-3df7-11ed-9e49-dac502259ad0.png

在容器內(nèi)重新執(zhí)行之前的編譯命令。然后會(huì)到開發(fā)機(jī)上查看生成的文件權(quán)限,可以看到容器內(nèi)生成的文件,在開發(fā)機(jī)上都已經(jīng)變成正確的權(quán)限了。

1beeb288-3df7-11ed-9e49-dac502259ad0.png

在容器內(nèi)調(diào)試

除了編譯代碼,開發(fā)環(huán)境另一個(gè)重要功能是進(jìn)行本地調(diào)試。打開一個(gè)iLogtail插件的單元測(cè)試文件,設(shè)置斷電然后點(diǎn)擊“debug test”。

1c057734-3df7-11ed-9e49-dac502259ad0.png

什么?Failed to launch: could not launch process: fork/fork/exec ...: operation not permitted,出錯(cuò)了!

1c27724e-3df7-11ed-9e49-dac502259ad0.png

查閱資料,原來是docker默認(rèn)的安全策略使用Secure computing mode (seccomp)僅允許白名單系統(tǒng)調(diào)用,debug所需的系統(tǒng)調(diào)用被拒絕了。我們嘗試在配置文件中添加一行"runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],禁用該功能。

{  "build": {    "dockerfile": "Dockerfile",    "args": {      "USERNAME": "${localEnv:USER}"    }  },  "initializeCommand": ".devcontainer/gen_env.sh",  "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],  "customizations": {    "vscode": {      "extensions": [        "golang.Go",        "ms-vscode.cpptools-extension-pack",        "DavidAnson.vscode-markdownlint"      ]    }  }}

Rebuild Container后,再次嘗試調(diào)試功能。It works!

1c4b020e-3df7-11ed-9e49-dac502259ad0.png

總結(jié)

至此,我們已經(jīng)可以happy地通過VS Code的Remote Development插件在遠(yuǎn)程容器內(nèi)開發(fā)了。并且使用的編譯鏡像和插件配置文件都是可移植,可重復(fù)的,CI到代碼庫后可以供任何開發(fā)者使用。文章中提到的代碼都可以到iLogtaill的GitHub倉庫(https://github.com/alibaba/ilogtail)獲取。

Remote Development插件還有很多的功能沒有在本篇文章中使用到,感興趣的讀者可以根據(jù)文末參考資料進(jìn)一步研究探索。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    511

    瀏覽量

    22459
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75343
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    242

    瀏覽量

    17126

原文標(biāo)題:一招解決開發(fā)環(huán)境問題 —— 遠(yuǎn)程容器開發(fā)指南

文章出處:【微信號(hào):玩轉(zhuǎn)VS Code,微信公眾號(hào):玩轉(zhuǎn)VS Code】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Windows下基于MSVC搭建ffmpeg開發(fā)環(huán)境

    Windows下基于MSVC搭建ffmpeg開發(fā)環(huán)境
    的頭像 發(fā)表于 06-08 10:27 ?2933次閱讀
    Windows下基于MSVC<b class='flag-5'>搭建</b>ffmpeg<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    請(qǐng)大家推薦一本好的labview書?適合入門,層次淺到

    請(qǐng)大家推薦一本好的labview書?適合入門,層次淺到
    發(fā)表于 06-15 09:01

    嵌入式linux開發(fā)環(huán)境該如何去搭建

    嵌入式linux開發(fā)環(huán)境搭建(Docker版,基于iTop 4412開發(fā)板)文章目錄嵌入式linux開發(fā)
    發(fā)表于 11-04 08:09

    開發(fā)環(huán)境搭建教程

    android Windows系統(tǒng)下開發(fā)環(huán)境搭建
    發(fā)表于 03-22 17:42 ?0次下載

    Android 開發(fā)環(huán)境搭建步驟詳細(xì)圖解

    Android 開發(fā)環(huán)境搭建步驟詳細(xì)圖解
    發(fā)表于 10-24 08:49 ?11次下載
    Android <b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>步驟詳細(xì)圖解

    php開發(fā)環(huán)境搭建和使用

    本文主要介紹的是php開發(fā)環(huán)境搭建和使用。apache在默認(rèn)情況下不會(huì)處理php頁面,Apache處理php頁面的步驟:即:php開發(fā)環(huán)境
    的頭像 發(fā)表于 02-01 15:26 ?3703次閱讀
    php<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>的<b class='flag-5'>搭建</b>和使用

    如何搭建鴻蒙開發(fā)環(huán)境

    開發(fā)某一個(gè)平臺(tái)的程序,那么首先要搭建出本地開發(fā)環(huán)境,那么如何搭建鴻蒙開發(fā)
    的頭像 發(fā)表于 02-24 11:25 ?4196次閱讀
    如何<b class='flag-5'>搭建</b>鴻蒙<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    嵌入式linux開發(fā)環(huán)境搭建(Docker版,基于iTop 4412開發(fā)板)

    嵌入式linux開發(fā)環(huán)境搭建(Docker版,基于iTop 4412開發(fā)板)文章目錄嵌入式linux開發(fā)
    發(fā)表于 11-01 16:57 ?0次下載
    嵌入式linux<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>(Docker版,基于iTop 4412<b class='flag-5'>開發(fā)</b>板)

    mac 搭建單片機(jī)開發(fā)環(huán)境

    mac 搭建單片機(jī)開發(fā)環(huán)境
    發(fā)表于 11-13 11:21 ?1次下載
    mac <b class='flag-5'>搭建</b>單片機(jī)<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    STM32 軟件開發(fā)環(huán)境搭建

    STM32 軟件開發(fā)環(huán)境搭建
    發(fā)表于 11-13 16:51 ?25次下載
    STM32 軟件<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    Digispark開發(fā)環(huán)境搭建

    Digispark開發(fā)環(huán)境搭建
    發(fā)表于 11-15 20:51 ?16次下載
    Digispark<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    使用 rust 開發(fā) stm32:開發(fā)環(huán)境搭建

    使用 rust 開發(fā) stm32:開發(fā)環(huán)境搭建
    發(fā)表于 11-18 19:36 ?51次下載
    使用 rust <b class='flag-5'>開發(fā)</b> stm32:<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    NXP freescale 開發(fā)環(huán)境搭建

    NXP freescale 開發(fā)環(huán)境搭建
    發(fā)表于 12-03 16:21 ?13次下載
    NXP freescale <b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    STM32 搭建開發(fā)環(huán)境

    STM32 搭建開發(fā)環(huán)境
    發(fā)表于 12-08 14:36 ?21次下載
    STM32 <b class='flag-5'>搭建</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    PyTorch深度學(xué)習(xí)開發(fā)環(huán)境搭建指南

    PyTorch作為一種流行的深度學(xué)習(xí)框架,其開發(fā)環(huán)境搭建對(duì)于深度學(xué)習(xí)研究者和開發(fā)者來說至關(guān)重要。在Windows操作系統(tǒng)上搭建PyTorc
    的頭像 發(fā)表于 07-16 18:29 ?2542次閱讀