<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10 行代碼,用 Python 創(chuàng)建一個 Windows 桌面快捷方式!

          共 4622字,需瀏覽 10分鐘

           ·

          2021-10-14 07:10

          這是「進擊的Coder」的第 490?篇技術分享作者:周蘿卜

          對于 Python 棧的小伙伴來說,miniconda 是一款非常棒的工具,它可以幫助我們快速的開啟虛擬環(huán)境,并在獨立的環(huán)境中使用特有的第三方庫,從而達到不同環(huán)境之間的隔離效果。

          默認情況下,miniconda 會盡量減少對系統(tǒng)的影響。例如,默認安裝不會將任何 python 信息添加到操作系統(tǒng)的默認路徑,也不需要管理員權限就可以進行安裝。這些看起來都非常棒,但這同樣意味著我們需要執(zhí)行一些額外的步驟才能讓 Python 環(huán)境在標準的 Windows 提示符下工作,對于新手來說,并不是特別友好。

          幸運的是,Anaconda (fka Continuum) 提供了啟動 powershell 或命令提示符的所有基礎功能,默認安裝會創(chuàng)建一些快捷方式來做到這一點,但是,我們很難修改這些快捷方式來自定義工作目錄。

          為了達到快速從某個目錄啟動 conda 的目的,我們自己創(chuàng)建一個快捷方式。

          整體思路

          我們一旦安裝了 miniconda,啟動 python shell 的首選方法就是使用 miniconda 的 activate.bat 文件來配置 shell 環(huán)境。在我的系統(tǒng)上(默認安裝 miniconda),文件存儲在這里:C:/Users/luobo/AppData/Local/Continuum/miniconda3/Scripts/activate.bat 。

          一般情況下,我們都不會直接在 conda 下面進行編碼,而是會創(chuàng)建一個工作環(huán)境。

          當 conda 在 Windows 上創(chuàng)建新環(huán)境時,該環(huán)境的默認目錄位置如下所示:C:/Users/luobo/AppData/Local/Continuum/miniconda3/envs/work 。我們可以將此完整路徑傳遞給 activate.bat 文件,它會為我們啟動并自動啟動并激活工作環(huán)境。

          啟動難題的最后一部分是使用 cmd.exe /K 來執(zhí)行一個 shell 命令,并返回激活環(huán)境成功的提示。

          完整的命令看起來像這樣:

          cmd.exe?/K?C:/Users/luobo/AppData/Local/Continuum/miniconda3/Scripts/activate.bat?C:/Users/luobo/AppData/Local/Continuum/miniconda3/envs/work

          好了,上面就是我們的一個整體編碼思路了,還是比較清晰的,下面就開始吧。

          特殊文件夾

          從上面的描述看一看到,我們的 miniconda 文件的路徑隱藏得很深,并且這個目錄還取決于登錄用戶的個人資料。所以為了我們制作的快捷方式具有通用性,顯然是不能進行硬編碼的。

          這里我們可以使用 winshell 這個第三方庫,它提供了訪問 Windows 上特殊目錄的快捷操作方式。這樣,我們的腳本應該可以在其他人的機器上無縫運行,并且可以跨不同版本的 Windows 運行。

          import?winshell
          from?pathlib?import?Path

          如果我們想獲取用戶的配置文件目錄,我們可以使用文件夾功能。

          profile?=?winshell.folder('profile')

          Output:

          'C:\\用戶\\luobo`

          Winshell 提供對許多不同文件夾的訪問,這些文件夾可以通過其 CSIDL(常量特殊 ID 列表)進行訪問。

          那么通過上面的例子,我們也可以推導出, minicodan 的目錄。

          miniconda_base?=?Path(winshell.folder('CSIDL_LOCAL_APPDATA'))?/?'Continuum'?/?'miniconda3')
          miniconda_base.is_dir()

          Output:

          True

          可以看到,通過測試,我們拿到的路徑是正確的。

          我們需要的另一個位置是 cmd.exe,我們可以通過 CSIDL_SYSTEM 獲得它。

          win32_cmd?=?str(Path(winshell.folder('CSIDL_SYSTEM'))?/?'cmd.exe')

          注意到我們使用 str 將 Path 轉換為字符串,這樣做是因為 winshell 期望它的所有輸入都是字符串,它不知道如何直接處理 pathlib 對象。

          生成快捷方式

          在 Windows 上使用快捷方式時,可以右鍵單擊快捷方式圖標并查看屬性。我們大多數人可能見過這樣的事情:

          d88618237f8655967c841df9bb6fc239.webp

          Winshell 提供了一個轉儲功能,使實際的快捷方式屬性更容易查看。

          例如,如果我們想查看開始菜單中現有的快捷方式,我們需要獲取 .lnk 文件的完整路徑,然后創(chuàng)建一個快捷方式對象并使用 dump 顯示值。

          lnk?=?Path(winshell.programs())?/?"Anaconda3?(64-bit)"?/?"Anaconda?Prompt?(miniconda3).lnk"
          shortcut?=?winshell.shortcut(str(lnk))
          shortcut.dump()

          Output:

          {
          C:\Users\luobo\AppData\Roaming\Microsoft\Windows\Start?Menu\Programs\Anaconda3?(64-bit)\Anaconda?Prompt?(miniconda3).lnk?->?C:\Windows\System32\cmd.exe

          arguments:?"/K"?C:\Users\luobo\AppData\Local\Continuum\miniconda3\Scripts\activate.bat?C:\Users\luobo\AppData\Local\Continuum\miniconda3
          description:?Anaconda?Prompt?(miniconda3)
          hotkey:?0
          icon_location:?('C:\\Users\\luobo\\AppData\\Local\\Continuum\\miniconda3\\Menu\\Iconleak-Atrous-Console.ico',?0)
          path:?C:\Windows\System32\cmd.exe
          show_cmd:?normal
          working_directory:?%HOMEPATH%
          }

          這是我們需要用來創(chuàng)建新快捷鏈接的所有信息的簡單展示。

          現在我們知道了我們需要的信息,我們就可以創(chuàng)建自己的快捷方式了。

          arg_str?=?"/K?"?+?str(miniconda_base?/?"Scripts"?/?"activate.bat")?+?"?"?+?str(miniconda_base?/?"envs"?/?"work")

          我們還可以選擇傳入一個需要包含完整路徑和圖標索引的圖標。

          在這個例子中,我使用的是 miniconda 使用的默認圖標。

          icon?=?str(miniconda_base?/?"Menu"?/?"Iconleak-Atrous-Console.ico")

          最后需要做的就是在指定的工作目錄中啟動 conda 環(huán)境。

          我們假設有一個 My Documents/py_work 目錄,其中包含我們所有的 python 代碼。我們可以使用 CSIDL_PERSONAL 訪問我的文檔并構建 py_work 的完整路徑。

          my_working?=?str(Path(winshell.folder('CSIDL_PERSONAL'))?/?"py_work")

          現在所有變量都已定義了,我們在桌面上創(chuàng)建一個快捷鏈接:

          link_filepath?=?str(desktop?/?"python_working.lnk")
          with?winshell.shortcut(link_filepath)?as?link:
          ????link.path?=?win32_cmd
          ????link.description?=?"Python(work)"
          ????link.arguments?=?arg_str
          ????link.icon_location?=?(icon,?0)
          ????link.working_directory?=?my_working

          如果一切不出現意外,我們就可以在桌面上看到一個快捷方式了。

          2f524807ce091572fe511ac1b77f473f.webp

          完整代碼

          import?winshell
          from?pathlib?import?Path

          #?Define?all?the?file?paths?needed?for?the?shortcut
          #?Assumes?default?miniconda?install
          desktop?=?Path(winshell.desktop())
          miniconda_base?=?Path(
          ????winshell.folder('CSIDL_LOCAL_APPDATA'))?/?'Continuum'?/?'miniconda3'
          win32_cmd?=?str(Path(winshell.folder('CSIDL_SYSTEM'))?/?'cmd.exe')
          icon?=?str(miniconda_base?/?"Menu"?/?"Iconleak-Atrous-Console.ico")

          #?This?will?point?to?My?Documents/py_work.?Adjust?to?your?preferences
          my_working?=?str(Path(winshell.folder('CSIDL_PERSONAL'))?/?"py_work")
          link_filepath?=?str(desktop?/?"python_working.lnk")

          #?Build?up?all?the?arguments?to?cmd.exe
          #?Use?/K?so?that?the?command?prompt?will?stay?open
          arg_str?=?"/K?"?+?str(miniconda_base?/?"Scripts"?/?"activate.bat")?+?"?"?+?str(
          ????miniconda_base?/?"envs"?/?"work")

          #?Create?the?shortcut?on?the?desktop
          with?winshell.shortcut(link_filepath)?as?link:
          ????link.path?=?win32_cmd
          ????link.description?=?"Python(work)"
          ????link.arguments?=?arg_str
          ????link.icon_location?=?(icon,?0)
          ????link.working_directory?=?my_working
          5944b51cb17d0dcbe0c5dff6847f9deb.webp

          End

          「進擊的Coder」專屬學習群已正式成立,搜索「CQCcqc4」添加崔慶才的個人微信或者掃描下方二維碼拉您入群交流學習。


          看完記得關注@進擊的Coder
          及時收看更多好文
          ↓↓↓


          崔慶才的「進擊的Coder」知識星球已正式成立,感興趣的可以查看《我創(chuàng)辦了一個知識星球》了解更多內容,歡迎您的加入:



          好文和朋友一起看~
          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人在线黄色片 | 丝袜足交操逼 | 日韩欧美一区二区一幕 | 激情综合婷婷久久 | 久久久久久久久久久网站 |