進擊的Coder.
崔慶才的個人公衆号,分享有關網絡爬蟲、Web開發、機器學習、技術心得、時事新聞、個人感悟等内容。
對于 Python 棧的小夥伴來說,miniconda 是一款非常棒的工具,它可以幫助我們快速地開啟虛拟環境,并在獨立的環境中使用特有的第三方庫,從而達到不同環境之間的隔離效果。
默認情況下,miniconda 會盡量減少對系統的影響。例如,默認安裝不會将任何 Python 信息添加到操作系統的默認路徑,也不需要管理員權限就可以進行安裝。這些看起來都非常棒,但這同樣意味着我們需要執行一些額外的步驟才能讓 Python 環境在标準的 Windows 提示一下的工作,對于新手來說,并不是特别友好。
幸運的是,Anaconda (fka Continuum) 提供了啟動 powershell 或命令提示符的所有基礎功能,默認安裝會創建一些快捷方式來做到這一點,但是,我們很難修改這些快捷方式來自定義工作目錄。
為了達到快速從某個目錄啟動 conda 的目的,我們自己創建一個快捷方式。
整體思路我們一旦安裝了 miniconda,啟動 python shell 的首選方法就是使用 miniconda 的 activate.bat 文件來配置 shell 環境。在我的系統上(默認安裝 miniconda),文件存儲在這裡:C:/Users/luobo/AppData/Local/Continuum/miniconda3/Scripts/activate.bat 。
一般情況下,我們都不會直接在 conda 下面進行編碼,而是會創建一個工作環境。
當 conda 在 Windows 上次創建新環境時,該環境的默認目錄位置如下所示:C:/Users/luobo/AppData/Local/Continuum/miniconda3/envs/work 。我們可以将此完整路徑傳遞給 activate.bat 文件,它會為我們啟動并自動啟動并激活工作環境。
啟動難題的最後一部分是使用 cmd.exe /K 來執行一個 shell 命令,并返回激活環境成功的提示。
完整的命令看起來像這樣:
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 上使用快捷方式時,可以右鍵單擊快捷方式圖标并查看屬性。我們大多數人可能見過這樣的事情:
Winshell 提供了一個轉儲功能,使實際的快捷方式屬性更容易查看。
例如,如果我們想查看開始菜單中現有的快捷方式,我們需要獲取 .lnk 文件的完整路徑,然後創建一個快捷方式對象并使用 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%
}
這是我們需要用來創建新快捷鍊接的所有信息的簡單展示。
現在我們知道了我們需要的信息,我們就可以創建自己的快捷方式了。
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 環境。
我們假設有一個 My Documents/py_work 目錄,其中包含我們所有的 python 代碼。我們可以使用 CSIDL_PERSONAL 訪問我的文檔并構建 py_work 的完整路徑。
my_working = str(Path(winshell.folder('CSIDL_PERSONAL')) / "py_work")
現在所有變量都已定義了,我們在桌面上創建一個快捷鍊接:
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
如果一切不出現意外,我們就可以在桌面上看到一個快捷方式了。
完整代碼
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
如果覺得文章不錯, 記得點贊關注收藏支持一波哦
以上文章來源于進擊的Coder ,作者周蘿蔔
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!