在 Windows上寫 Python 代碼的最佳組合!

2022-01-22 濤哥聊Python

在 Windows 上怎樣做 Python 開發?是像大神那樣使用純文本編輯器,還是用更加完善的 IDE?到底是用自帶的命令行工具,還是需要裝新的 Terminal?本文將帶你了解如何利用微軟官方維護的 MS Terminal 與 VS Code,來為 Python 開發保駕護航。使用 Windows 系統一大好處是它的應用太豐富了,甚至強大的 GPU 也能在閒暇時間做點其它「工作」。然而與 Linux 或 macOS 不同,在 Windows 上做開發總會遇到很多挑戰,不論是文件編碼、環境控制還是項目編譯,開發過程中總會有一些神奇的收穫。這些對於初學者來說尤其突出:我們在安裝某個庫時可能出現各種依賴項錯誤,我們在讀寫文本時出現各種編碼錯誤等等。那麼在 Windows 上如何做 Python 開發呢?相信大神們都會有自己的解決方案,但本文希望介紹微軟官方發布的 Terminal 和 Visual Studio Code,希望它們能構建更流暢的 Windows 開發體驗。Visual Studio Code 是程式設計師可以使用的最酷的代碼編輯器之一,是一個可在所有平臺上使用的開源、可擴展和輕量級編輯器。正是這些品質使微軟的 VS Code 大受歡迎,並成為 Python 開發的絕佳平臺。可能很多讀者都比較熟悉 PyCharm 與 Jupyter Notebook 等常見的 Python IDE,但 VS Code 一樣不會令你失望。在本文中,你將學習到微軟 Terminal 和 Visual Studio Code 的特性,包括:我們假設你了解 Python 開發,並且已經在系統上安裝了某種版本的 Python(如 Python 2.7、Python 3.6/3.7、Anaconda 或其他)。由於 VS Code 可兼容所有主流平臺,因此你可能會看到略有不同的 UI 元素,並且可能需要修改某些命令。Windows Terminal 是一個開源終端應用程式,由微軟在今年 5 月份的 Build 開發者大會上推出。MS Terminal 支持 Command Prompt 和 PowerShell 的所有優點,基本上命令行已經可以和 Linux 相融合了,除此之外運行命令提示符也是沒問題的。在 MS Terminal 開源後,GitHub 的 Star 量增長得非常快,目前已經超過了 5 萬。這足以說明這個項目非常受關注,在社區的開源改進下,這個工具一定挺好用。當然,目前 MS Terminal 已經可以直接下載安裝程序了,社區的體驗也非常不錯。因此如果我們在 Windows 上做 Python 開發,命令行工具就可以採用 MS Terminal,它能解決很大一部分的包安裝、環境控制等問題。MS Terminal 最核心的功能就是支持多條選項卡,且每一個選項卡都可以連接到命令行 shell 或應用,例如 Command Prompt 或通過 SSH 訪問樹莓派等。下圖展示了這種多選項卡的支持情況:此外,除了功能外,更重要的就是顏值,就像我們常用 zsh 來提供更美觀的命令行一樣。雖然 zsh 目前的 GitHub 收藏量已經達到 9.4 萬了,但 ReadMe 文檔清楚地寫著它最好用於 macOS 或 Linux。而新發布的 MS Terminal 不論在界面還是在文字風格,都以前都強了很多。背景透明度、文字高亮都可以自行定義,還能定義 emoji 等符號。如下為基本的展示,我們可以根據自己的需要調整整個界面。整個項目還在積極開發中,很多功能也都在完善與增加。不過既然是微軟官方維護的開源項目,那麼我們還是非常有信心的,至少在命令行部分可以降低開發過程中的各種報錯。當然如果讀者在 Windows 上有更好的命令行工具推薦,也可以在文末留言。前面介紹了開發中必不可缺的命令行工具,下面我們該聊一聊 VS Code 了,它是支持 Python 開發的核心工具。下面我們從最初的安裝、環境管理到編寫、測試、發布代碼,介紹我們該如何優雅地使用 VS Code。在任何平臺上都可以安裝 Visual Studio Code。官網提供了 Windows、Mac 和 Linux 的完整安裝說明,並且會每月更新編輯器,其中包含新功能和錯誤修正。你可以在 Visual Studio Code 網站上找到所有安裝內容:此外,除名稱相近外,Visual Studio Code(簡稱 VS Code)與基於 Windows 的更大規模的 Visual Studio 幾乎沒有其他相同的地方。Visual Studio Code 本身支持多種語言,並且它的一個擴展模型具有支持其他組件的豐富生態系統。VS Code 每月更新,你可以在微軟 Python 博客中了解更新信息。任何用戶都可以克隆微軟的 VS Code Github 倉庫並貢獻自己的代碼。VS Code UI 已有詳細記錄,這裡不予贅述:如上所述,VS Code 通過詳細記錄的擴展模型支持多種程式語言的開發。Python 擴展使用戶可以在 Visual Studio Code 中進行 Python 開發,具有以下特徵:Visual Studio Code 擴展不僅僅具有編程功能:

GitLens 直接在編輯視窗中提供了大量有用的 Git 功能,包括非責任注釋和存儲庫開發功能。

通過從菜單中選擇 File, Auto Save,可以輕鬆進行自動保存。默認延遲時間為 1000 毫秒,也可以重新配置。

Settings Sync 允許用戶藉助 GitHub 在不同的裝置中同步自己的 VS Code 設置。如果用戶在不同的計算機上工作,這有助於運行環境保持一致。

Docker 讓用戶可以快速輕鬆地使用 Docker,幫助創作 Dockerfile 和 docker-compose.yml,打包和部署項目,甚至為項目生成適當的 Docker 文件。

當然,在使用 VS Code 時,你可能會發現其他有用的擴展。請在評論中分享你的發現和設置!單擊活動欄(Activity Bar)上的「擴展」圖標可以訪問和安裝新擴展和主題。用戶可以輸入關鍵詞來搜索擴展程序,以多種方式對搜索結果進行排序,快速輕鬆地安裝擴展程序。在本文中,在活動欄的 Extensions 項中鍵入 python 並單擊 Install 即可安裝 Python 擴展:

值得一提的是,Visual Studio Code 可通過用戶和工作區設置(User and Workspace Settings)實現高度配置。用戶設置(User settings)在所有 Visual Studio Code 實例中都是全局性的,而工作區設置(Workspace Settings)是特定文件夾或項目工作區的本地設置。工作區設置為 VS Code 提供了極大的靈活性,工作區設置會在整篇文章中提到。工作區設置以.json 文件的形式存儲在名為.vscode 的項目工作區本地文件夾中。讓我們以一個新的 Python 程序來探索 Visual Studio Code 中的 Python 開發。在 VS Code 中,鍵入 Ctrl + N 打開一個新文件。(你也可以從菜單中選擇「文件」-「新建」。)無論你如何操作,你都應該看到一個類似於以下內容的 VS Code 窗口:作為測試,我們可以快速編碼埃拉託斯特尼篩法(Sieve of Eratosthenes,它可以找出小於已知數的所有質數)。在剛打開的新選項卡中鍵入以下代碼:等等,這是怎麼回事?為什麼 Visual Studio Code 沒有進行任何關鍵詞高亮顯示,也沒有進行任何自動格式化或任何真正有用的操作呢?它提供了什麼?答案是,VS Code 不知道它正在處理的是什麼類型的文件。緩衝區被稱為 Untitled-1,如果你查看窗口的右下角,則可以看到 Plain Text(純文本)。若要激活 Python 擴展,請保存文件(從菜單中選擇 File-Save 或者從命令面板中選擇 File-Save File 或者只使用 Ctrl + S)為 sieve.py。VS Code 將看到.py 擴展名並正確地將該文件轉化為 Python 代碼。這樣就好多了!VS Code 會自動將文件重新格式化為 Python 代碼,你可以通過檢查左下角的語言模式予以驗證。如果你有多個 Python 安裝(如 Python 2.7、Python 3.x 或 Anaconda),則可以通過單擊語言模式指示器或者從命令面板中選擇 Python: Select Interpreter 來更改 VS Code 所要使用的 Python 解釋器。默認情況下,VS Code 支持使用 pep8 格式,但你也可以選擇 black 或 yapf。現在可以添加其餘的 Sieve 代碼。若要查看 IntelliSense,請直接鍵入此代碼而不要剪切和粘貼,你應該看到如下內容:

當鍵入代碼時,VS Code 會對 for 和 if 語句下面的行進行自動、適當的縮進,添加右括號,並給出內容提示。現在代碼已經完成,你可以運行它了。沒有必要讓編輯器執行此操作:Visual Studio Code 可以直接在編輯器中運行此程序。保存文件(Ctrl + S),然後在編輯器窗口中單擊右鍵並選擇在終端(Terminal)中運行 Python 文件(Run Python File):

你會看到終端窗格顯示在窗口的底部,並顯示代碼輸出結果。在 Sieve of Eratosthenes 示例中,你創建了一個 Python 文件。作為一個例子這很不錯,但很多時候,你需要創建更大的項目,並在更長的時間內在它上面進行開發。在 Python 項目(而不是單個 Python 文件)上使用 Visual Studio Code 開闢了更多功能,使得 VS Code 能夠真正發揮作用。讓我們來看看它在更大的項目中如何運作。假如我們編寫了一個計算器程序,該程序通過艾茲格·迪科斯徹(Edsger Dijkstra)調度場算法的一種變體來解析中綴符號(infix notation)編寫的方程式。為了說明 Visual Studio Code 以項目為中心的特徵,我們現在開始在 Python 中重新創建調度場算法作為方程式評估庫。相應 GitHub 地址:https://github.com/JFincher42/PyEval。本地文件夾創建後,你可以快速打開 VS Code 中的整個文件夾。由於我們已經創建了文件夾和基本文件,所以首選方法(如上所述)做出如下修正:當你這種方式打開時,VS Code 了解並將使用它看到的任何 virtualenv、pipenv 或 conda 環境。你甚至不需要首先啟動虛擬環境。通過菜單中的 File, Open Folder、鍵盤上的 Ctrl+K, Ctrl+O 或者命令面板中的 File, Open Folder 等方式,你可以打開用戶界面(UI)上的文件夾。當 Visual Studio Code 打開文件夾時,它還會再次打開上次打開的文件(這是可配置的)。你可以打開、編輯、運行和調試列出的任何文件。左側活動欄中的資源管理器視圖(Explorer view)提供文件夾中所有文件的視圖,並顯示當前選項卡集中有多少未保存文件。VS Code 可以自動識別在 unittest、pytest 或 Nose 框架中編寫的現有 Python 測試,但前提是在當前環境中安裝了這些框架。作者在 unittest 框架中編寫了一個用於方程式 eval 庫的單元測試,你可以在這個例子中使用它。若要運行項目中任何 Python 文件的現有單元測試,請單擊右鍵並選擇 Run Current Unit Test File。系統將提示指定測試框架,在項目中搜索測試的位置以及測試使用的文件名模式。所有這些都保存為本地.vscode/settings.json 文件中的工作區設置,並可以進行修改。對於這個等式項目,你可以選擇 unittest、當前文件夾和模式 *_test.py。測試框架設置完成並顯示測試後,你可以單擊狀態欄(Status Bar)上的 Run Tests 並從命令面板中選擇一個 option 來運行所有測試:通過在 VS Code 中打開測試文件,單擊狀態欄上的 Run Tests,然後選擇 Run Unit Test Method 以及其他要運行的特定測試,你還可以運行單個測試。這使得解決單個測試失敗並重新運行失敗的測試變得很簡單,從而能夠節省大量時間。測試結果顯示在 Python Test Log 下的 Output 窗格中。即使 VS Code 是代碼編輯器,直接在 VS Code 中調試 Python 也是可以的。VS Code 提供的諸多功能可以媲美好的代碼調試器,包括:你可以在活動欄上的 Debug 視圖中看到這些功能:調試器可以控制在內置終端或外部終端實例中運行的 Python 應用程式。它可以附加到已經運行的 Python 實例中,甚至可以調試 Django 和 Flask 應用程式。在單個 Python 文件中調試代碼就像按 F5 啟動調試器一樣簡單。你可以按 F10 和 F11 分別跳過和進入函數,並按 Shift + F5 退出調試器。按 F9 設置斷點,或者通過單擊編輯器窗口中的左空白(lift margin)進行設置。在開始調試更複雜的項目(包括 Django 或 Flask 應用程式)之前,你首先需要設置並選擇調試配置。設置調試配置相對簡單。從 Debug 視圖中選擇 Configuration 下拉列表(drop-down),然後選擇 Add Configuration 和 Python:Visual Studio Code 將在當前名為.vscode/launch.json 的文件夾下創建一個調試配置文件,它允許用戶設置特定的 Python 配置以及調試 Django 和 Flask 等特定應用程式的設置。你還可以執行遠程調試,並調試 Jinja 和 Django 模板。關閉編輯器中的 launch.json 文件,然後從 Configuration 下拉列表中為應用程式選擇正確的配置。VS Code 不僅內置對原始碼控制管理的支持,還支持 Git 和 GitHub。你可以在 VS Code 中安裝對其他 SCM 的支持,並列使用它們。用戶可以從 Source Control 視圖訪問原始碼控制:如果你的項目文件夾包含.git 文件夾,VS Code 會自動打開所有 Git / GitHub 功能。你可以執行以下諸多任務:

將文件提交給 Git

將更改推送到遠程存儲庫(remote repo)並從中取出更改

check-out 現有或創建新的分支和標籤(branch and tag)

查看並解決合併衝突(merge conflict)

查看差異(view diffs)

所有這些功能都可以直接從 VS Code UI 獲得:VS Code 還可以識別編輯器外部進行的更改並且正確運作。在 VS Code 中提交最近的更改相當簡單。修改後的文件顯示在 Source Control 視圖中,並帶有 M 標記,而新的未跟蹤文件使用 U 標記。將滑鼠懸停在文件上然後單擊加號(+)可以暫存更改。在視圖頂部添加提交消息,然後單擊複選標記來提交更改:你也可以在 VS Code 中將本地提交(local commits)推送到 GitHub。從 Source Control 視圖菜單中選擇 Sync,或者單擊分支指示器(branch indicator)旁邊狀態欄上的 Synchronize Changes。所以在作者看來,Visual Studio Code 是最酷的通用編輯器之一,也是 Python 開發的最佳候選工具。希望你也可以在 Python 開發中嘗試使用 Visual Studio Code 編輯器,相信不會令你失望的。

https://realpython.com/python-development-visual-studio-code

https://devblogs.microsoft.com/commandline/introducing-windows-terminal

你好,我是Sitin濤哥,Python程式設計師,項目經理,努力創業中ing

相關焦點

  • 如何用 Python 寫一個安卓 APP ?
    因為跨平臺的,所以只寫一遍代碼,就可以同時生成安卓及IOS的APP,很酷吧。  本文會帶大家寫一個Hello world並瞧一瞧 Python 版的2048的代碼  kivy安裝  環境說明:筆者在用的是Python2.7.10  這裡僅介紹windows平臺安裝  所有平臺參考: https://kivy.org/#download  更新pip,setuptools
  • 如何用PYTHON代碼寫出音樂
    我一直在做這樣的嘗試,就是通過人工智慧算法實現機器自動的作詞和編曲(在這裡預告下,通過深度學習寫歌詞已經實現了,之後會分享給大家),本文我們主要聊下如何寫曲。說到用代碼寫曲子,有一個東西大家一定要了解就是MIDI。MIDI是一種樂器數字接口,是編曲界最廣泛的音樂標準格式。MIDI並不是真正意義上的音樂文件,大家可以把它理解成樂譜,需要有環境編譯MIDI文件,才可以生成音樂。
  • 利用python免殺cs shellcode
    當沙灘上的沙子鋪滿全身的那一刻,我,擁有了幾分鐘童年。在途中,偶遇了黃河,沒錯,它確實很黃,並且波濤洶湧。也在這途中,緣分使我進入了曾經告別的安全行業。0x02 概述1、什麼是shellcode在維基百科中這樣解釋道:在黑客攻擊中,shellcode是一小段代碼,用於利用軟體漏洞作為有效載荷。
  • 【Python玩轉Minecraft】35石英鐘,代碼部分
    玩轉我的世界】09建造不同材料的金字塔【python玩轉我的世界】10改進金字塔,修復小bug【python玩轉我的世界】11巨大的疊羅漢金字塔,流觴曲水【python玩轉我的世界】12改進一下上個金字塔【python玩轉Minecraft】13畫個半徑十麥塊的球【python玩轉Minecraft
  • Python 520告白特技:隱藏在聊天記錄裡的珍貴禮物
    接下來,我們將使用Python代碼,將裡面真正的聊天內容:content信息提取出來,如下所示。雖然這個軟體也允許select,但是它select後不允許導出,非常不好用,因此還不如我們自己寫一個:記得運行前要安裝jieba分詞包,默認你已經安裝了python3,如果沒有請查閱這個文檔:https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624windows打開CMD / macOS系統打開Terminal 輸入:
  • Python 情人節告白特技:隱藏在聊天記錄裡的珍貴禮物
    接下來,我們將使用Python代碼,將裡面真正的聊天內容:content信息提取出來,如下所示。雖然這個軟體也允許select,但是它select後不允許導出,非常不好用,因此還不如我們自己寫一個:記得運行前要安裝jieba分詞包,默認你已經安裝了python3,如果沒有請查閱這個文檔:https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624windows打開CMD / macOS系統打開Terminal 輸入:
  • 聽說你用Python?那你可別中招了!
    一次偶然,發現公司內部的python庫發生洩露,並且該庫目前沒有在pypi.org中註冊。雖然不需要原始碼即可進行註冊,進行python包供應鏈攻擊,指向性強,但是有原始碼可以偽裝的更逼真,讓受害者難以察覺這份代碼裡有「毒」。這種攻擊方式會不會影響到我們內部?抱著這個疑問,進行了實踐。
  • Python漫畫爬蟲——漫畫喵的100行代碼逆襲
    這次的博客,講的是使用python編寫一個爬蟲工具。為什麼要寫這個爬蟲呢?
  • 【Python 第20課】 命令行常用命令
    打開命令行,我們會看到每行前面都有諸如C:\Documents and Settings\Crossin>或者MyMacBook:~ crossin$之類的。這個提示符表示了當前命令行所在目錄。在這裡,我們輸入python就可以進入python環境了。
  • python+ pycharm 環境安裝 + pycharm使用
    一、下載和安裝python1.可以搜索python官網找到官方連結點擊進入2.也可以用以下連結點擊進入:https://www.python.org/3.進入python後把滑鼠移到downloads上,然後看到下拉選項
  • 如何在python語言代碼實現間隔加減法
    工具Visual Studiopython環境技術>pythondjango在使用python語言時,除了可以實現常規的功能之外,還可以用於數學計算。選擇空python文件,添加4、打開新建的python文件,定義兩個變量num和result,然後使用for……in循環,當i對2取模得到0,
  • 利用python做串口通訊上位機
    最近聽說python很火,一直好奇能否用python開發一個串口上位機軟體,經過這幾天的嘗試,終於成功了。接下來給大家分享一下。1.      安裝python開發環境首先到python官網https://www.python.org/downloads/windows/下載python軟體。如下圖所示,最新版本為3.8.
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    其實某個特定程序(無論使用何種程式語言)的運行速度是快還是慢,在很大程度上取決於編寫該程序的開發人員自身素質,以及他們編寫優化而高效代碼的能力。Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。
  • 利用Python開發App
    簡而言之,這是一個python桌面程序開發框架(類似wxpython等模塊),強大的是kivy支持linux、mac、windows、android、ios平臺,這也是為什麼開發app需要用到這個模塊。
  • 如何利用Python開發App?
    準備工作利用python開發app需要用到python的一個模塊–kivy,kivy是一個開源的,跨平臺的Python開發框架,用於開發使用創新的應用程式。簡而言之,這是一個python桌面程序開發框架(類似wxpython等模塊),強大的是kivy支持linux、mac、windows、android、ios平臺,這也是為什麼開發app需要用到這個模塊。
  • 簡易的IDAPython腳本
    所以才開始了解並編寫ida腳本,不過由於網上能看的資料實在是比較少,踩了不少坑,到今天為止終於可以愉快,並且順暢的寫腳本了。所以把流程分享給大家,希望能幫助像我一樣的人提高分析效率。is None or not self.windows.isVisible(): self.windows = QtWidgets.QMainWindow() main_window.setupUi(self.windows) self.windows.showNormal() pass # 腳本結束的時候調用
  • 利用Python開發App實戰
    準備工作利用python開發app需要用到python的一個模塊–kivy,kivy是一個開源的,跨平臺的Python開發框架,用於開發使用創新的應用程式。簡而言之,這是一個python桌面程序開發框架(類似wxpython等模塊),強大的是kivy支持linux、mac、windows、android、ios平臺,這也是為什麼開發app需要用到這個模塊。
  • Python中的函數式編程教程,學會用一行代碼搞定
    next__(self):        # second magic method        if self.current > self.high:            raise StopIteration        else:            self.current += 1 return self.current - 1「魔法方法是python
  • python一句代碼生成26個英文字母
    python生成26個大小寫英文字母實現代碼:
  • Python 2和Python 3代碼有哪些區別?
    最近的項目開始用Python3寫了,也體會了一下2和3的區別。主要的一些區別在以下幾個方面: print函數Python 2中print是語句(statement),Python 3中print則變成了函數。