在内网 Windows 离线安装 miniconda 和 python

这几天在内网环境配置 python,稍作记录。需要强调的是,我的方案并没有 100% 完成,目前所有操作都是在 conda 默认的 base 环境中进行,没有完成 conda 安装特定 python 版本这个场景,急着干手头的活,先这样了。

安装 Minicoda

和 Anaconda 的关系

Miniconda 和 Anaconda 都是由Anaconda, Inc. 开发和维护的。

Anaconda 是 一个功能全面的Python发行版本,包含了Python解释器、Conda包管理器以及大量预安装的科学计算、数据分析、机器学习等领域的第三方库(如NumPy、Pandas、SciPy、Jupyter等)。

Miniconda 是 Anaconda 的一个精简版本。仅包含 Python解释器、Conda包管理器和基本的包管理工具,没有预装第三方库。Miniconda 使用的是BSD许可,这意味着可以在商业场景中免费使用 Miniconda。有一说一,就算 Anaconda 是开源的,我也会选择用 Miniconda。

下载

下载: https://docs.anaconda.com/miniconda/miniconda-install/

官方命令行使用

image-20240829下午45329326

img

conda info
conda info --env # 列出所有环境
conda env list # 列出所有环境
python --version
pip --version

查看 conda 的路径

where conda

复制 Scripts这个路径,将它添加到PATH中

新增 script 文件夹路径到 PATH

控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量->Path

image-20240830下午40517367

这样就可以任意打开 cmd 或者 powershell 开始使用conda了。这也是为了方便和 vscode 等其他工具配合。

下载 python 库

我以下载appium-python-client为例子:

在外网环境中下载

在一台可以访问互联网的电脑上,使用以下命令来下载 appium-python-client 及其依赖项:

pip download appium-python-client -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20240902下午20248045

将下载好的 .whl.tar.gz 文件通过U盘或其他方式转移到离线环境中。

在离线环境中安装包

在离线环境中使用 pip 安装下载的文件:

pip install --no-index --find-links=/path/to/downloaded/files appium-python-client

/path/to/downloaded/files 替换为文件夹的路径。

检查安装结果

安装完成后,运行以下命令检查是否成功安装:

pip show appium-python-client

如果能看到包的信息,说明安装成功。


在内网 Windows 离线使用 vscode

内网 Windows 安装 vscode

下载:https://code.visualstudio.com/

正常安装就行。主要关注点是把 code 的路径放到 PATH 路径下。

  1. 打开命令提示符CMD或 PowerShell,按 Win + R,输入 cmdpowershell,然后按回车。

  2. 输入 code 命令

    code --version
    
  3. 检查输出

    如果 code 命令未安装或不可用,将看到类似以下的错误信息

    'code' 不是内部或外部命令,也不是可运行的程序或批处理文件。
    

    如果正常安装,可以跳过下面的步骤。

  4. 打开 VSCode

  5. 打开命令面板:按 Ctrl + Shift + P 打开命令面板。

  6. 输入并选择 Shell Command: Install 'code' command in PATH

  7. 重启终端,然后再次输入 code --version 检查是否可用。

  8. 还是不行的话,手动设置PATH:控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量->Path

下载原有扩展

获取现有的 Vscode 扩展列表

code --list-extensions > vscode-extensions-list.txt

安装了很多,我只挑最紧要的,比如:

ms-ceintl.vscode-language-pack-zh-hans
ms-python.debugpy
ms-python.python
vscodevim.vim

下载

  1. 访问 Visual Studio Code Marketplace

  2. 搜索

  3. 在扩展的页面上,点击右下角的 Download Extension 链接下载 .vsix 文件。

  4. 将所有下载的 .vsix 文件保存在一个文件夹中,比如 vscode-extensions 文件夹。

批量安装扩展

在同一目录下创建一个批处理文件,比如 install-vscode-extensions.bat,内容如下:

@echo off
setlocal

REM 设置扩展文件所在的目录
set "EXT_DIR=%HOMEPATH%\vscode-extensions"

REM 循环遍历该目录下的所有 .vsix 文件并安装
for %%f in ("%EXT_DIR%\*.vsix") do (
    echo Installing %%f ...
    code --install-extension "%%f"
)

echo All extensions installed.
endlocal
pause

注意事项

  • 确保 code 命令在 PATH 中,这样批处理脚本才能正确调用 VSCode 的 CLI 工具。
  • 如果 code 命令不可用,可以通过以下步骤将其添加到 PATH:
    1. 打开 VSCode。
    2. Ctrl+Shift+P,输入 Shell Command: Install 'code' command in PATH,然后按回车。
  • 运行脚本时,确保 VSCode 已经关闭,或者可以同时安装扩展而不关闭 VSCode。

如果批量脚本无法安装,也可以如下手动导入install from VSIX

image-20240830上午112503681

我的中文包好像有点问题,不管它了:

image-20240830上午112421934


使用 Linux 服务器同步 Mac 和 Windows 剪切板 2

接着上一篇文章,在Mac上随手把同步图片和文件的功能也做了,Windows暂时不用,就不做了。简单说明一下内容:

核心逻辑: osascript -e 'clipboard info' 2>/dev/null:

  1. 文件内容处理

    osascript -e 'clipboard info'
    «class furl», 39, «class ut16», 22, «class utf8», 10, «class icns», 781190, Unicode text, 20, string, 10, «class 8BPS», 1068148, GIF picture, 48307, «class jp2 », 66756, JPEG picture, 53765, TIFF picture, 4198020, «class PNGf», 202292, «class BMP », 4194442, «class TPIC», 735063
    
  2. 图片内容检测

    osascript -e 'clipboard info'
    *** Error creating a JP2 color space: falling back to sRGB
    «class PNGf», 30911, «class 8BPS», 120626, GIF picture, 9586, «class jp2 », 30845, JPEG picture, 20160, TIFF picture, 1053698, «class BMP », 1052906, «class TPIC», 46827
    
  3. 文本内容检测

    osascript -e 'clipboard info'
    «class utf8», 96, «class ut16», 186, string, 9, Unicode text, 184
    

还有一个注意点是,文件处理的 «class furl»,路径分隔是:`,所以做了一些其他处理:

osascript -e 'the clipboard as «class furl»'
file Macintosh HD:Users:kelu:Downloads:xxx.sh

以下是具体代码:

# ver 2.0
# 远端路径定义
REMOTE_DIR="/tmp/clipboard"
REMOTE_HOST="1.2.3.4"
REMOTE_USER="user"
REMOTE_PASS="password"

LOCAL_DIR="$HOME/Downloads"
TEXT_FILE="clipboard_sync.txt"
IMAGE_FILE="clipboard_content.png"

# 检查远端是否有 /tmp/clipboard 文件夹
REMOTE_EXISTS=$(sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "[ -d $REMOTE_DIR ] && echo 'exists'")

if [ "$REMOTE_EXISTS" == "exists" ]; then
    echo "# 远端文件夹存在" 
    if sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "[ -f $REMOTE_DIR/$TEXT_FILE ]"; then
        echo "# 拷贝文字到剪切板" 
        sshpass -p "$REMOTE_PASS" scp $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/$TEXT_FILE" "$LOCAL_DIR/$TEXT_FILE"
        cat "$LOCAL_DIR/$TEXT_FILE" | pbcopy
        cat "$LOCAL_DIR/$TEXT_FILE" | head -n 1
        echo ""
    elif sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "[ -f $REMOTE_DIR/$IMAGE_FILE ]"; then
        echo "# 下载图片到本地剪切板" 
        sshpass -p "$REMOTE_PASS" scp $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/$IMAGE_FILE" "$LOCAL_DIR/$IMAGE_FILE"
        osascript -e "set the clipboard to (read (POSIX file \"$LOCAL_DIR/$IMAGE_FILE\") as «class PNGf»)"
    else
        echo "# 获取远端目录中的文件"
        RANDOM_FILE=$(sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "ls -1 $REMOTE_DIR | shuf -n 1")

        if [ -n "$RANDOM_FILE" ]; then
            echo "# 下载文件 $RANDOM_FILE"
            sshpass -p "$REMOTE_PASS" scp $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/$RANDOM_FILE" "$LOCAL_DIR/$RANDOM_FILE"

            filePath="$LOCAL_DIR/$RANDOM_FILE"
osascript <<EOF
set filePath to POSIX file "$filePath" as alias
tell application "Finder"
    set the clipboard to (filePath as «class furl»)
end tell
EOF
        fi
    fi

    echo "# 清除远端数据"
    sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_DIR"
else
    sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_DIR"

    CLIPBOARD_TYPE=$(osascript -e 'clipboard info' 2>/dev/null)


    if echo "$CLIPBOARD_TYPE" | grep -q "furl"; then
        # 获取剪贴板中的路径
        FILE_PATH=$(osascript -e 'the clipboard as «class furl»' | tr -d '"')

        # 将 Mac 路径转换为 POSIX 路径
        FILE_PATH_POSIX=$(osascript -e "POSIX path of POSIX file \"$FILE_PATH\"")

        # 将 POSIX 路径中的冒号替换为斜杠
        FILE_PATH_POSIX=$(echo "$FILE_PATH_POSIX" | sed 's/:/\//g' | sed -e 's/^file Macintosh HD//')

        echo "# 检测到文件路径: $FILE_PATH_POSIX"
        sshpass -p "$REMOTE_PASS" scp "$FILE_PATH_POSIX" $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/"
        echo "# 推送远端剪切板文件"
        exit 0
    fi

    if echo "$CLIPBOARD_TYPE" | grep -q "TIFF"; then
        echo "# 将剪切板中的图片保存为文件"
        osascript -e 'set imgData to the clipboard as «class PNGf»
                      set imgFile to open for access POSIX file "'$LOCAL_DIR/$IMAGE_FILE'" with write permission
                      write imgData to imgFile
                      close access imgFile' 2>/dev/null
        sshpass -p "$REMOTE_PASS" scp "$LOCAL_DIR/$IMAGE_FILE" $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/"
        echo "# 推送远端剪切板图片"
        rm "$LOCAL_DIR/$IMAGE_FILE"
        exit 0
    fi

    if echo "$CLIPBOARD_TYPE" | grep -q "string\|Unicode text"; then
        echo "# 检测到文本内容"
        pbpaste > "$LOCAL_DIR/$TEXT_FILE"
        sshpass -p "$REMOTE_PASS" scp "$LOCAL_DIR/$TEXT_FILE" $REMOTE_USER@$REMOTE_HOST:"$REMOTE_DIR/$TEXT_FILE"
        echo "# 推送远端剪切板文字"
        cat "$LOCAL_DIR/$TEXT_FILE" | head -n 1
        rm "$LOCAL_DIR/$TEXT_FILE"
        exit 0
    fi

    sshpass -p "$REMOTE_PASS" ssh $REMOTE_USER@$REMOTE_HOST "rm -rf $REMOTE_DIR"
fi


使用 Linux 服务器同步 Mac 和 Windows 剪切板

在我日常工作中,Mac 和 Windows 设备分别位于两个不同的 NAT 网络下,它们之间无法直接通信。然而,偶尔需要同步剪切板内容,就有点头疼。

为了解决这个问题,我利用一台 Linux 服务器作为中转节点。通过 SSH,手动把 Mac 和 Windows 各自的剪切板内容上传至服务器,并从服务器获取对方的剪切板内容。

需要特别说明的是,这个脚本仅支持同步简单的文字内容,无法处理图片或文件。如果需要同步这些类型的内容,需要考虑其他方案,例如局域网IM之类的(Synapse/Mattermost/Rocket.Chat/XMPP/Jabber/IRC),或者是文件共享目录,当然部署起来也稍微重一些。

Mac

#!/bin/bash

# 临时文件路径
TEMP_FILE="/tmp/clipboard_sync.txt"

# 从 Linux 服务器下载剪切板内容到本地临时文件
sshpass -p 'Abcd1234' ssh user@1.2.3.4 "cat /tmp/remote_clipboard.txt" > "$TEMP_FILE"

# 将本地剪切板内容上传到 Linux 服务器
pbpaste | sshpass -p 'Abcd1234' ssh user@1.2.3.4 "cat > /tmp/remote_clipboard.txt"

# 将临时文件内容拷贝到本地剪切板
cat "$TEMP_FILE" | pbcopy

Windows

@echo off
chcp 65001 >nul

:: 临时文件路径
set TEMP_FILE=%TEMP%\clipboard_sync.txt

:: 从 Linux 服务器下载剪切板内容到本地临时文件
plink -ssh -pw Abcd1234 -batch user@1.2.3.4 "cat /tmp/remote_clipboard.txt" > "%TEMP_FILE%"
:: if exist "%TEMP_FILE%" (
::     echo Clipboard content downloaded successfully to %TEMP_FILE%.
:: ) else (
::     echo Failed to download clipboard content.
:: )

:: 将本地剪切板内容上传到 Linux 服务器
powershell -command "Get-Clipboard" | plink -ssh -pw Abcd1234 -batch user@1.2.3.4 "cat > /tmp/remote_clipboard.txt"

:: 将临时文件内容拷贝到本地剪切板
powershell -command "Get-Content -Raw '%TEMP_FILE%' | Set-Clipboard"

:: echo Script execution completed.
:: pause
  • plink 是 PuTTY 提供的命令行工具,可以用于 SSH 连接,并支持通过命令行参数传递密码。
  • 注释的一些内容可以打开作为 debug 排查问题。
  • 注意 windows 下的编码问题,可以把脚本全部拷贝到剪切板,然后windows下新建文件,保存成 utf-8 编码方式。

将 FileZilla 配置文件从 Windows 7 迁移到 Windows 10

FileZilla 的配置文件通常存放在用户目录下的一个隐藏文件夹中。具体路径如下:

  • Windows 7:
    C:\Users\<你的用户名>\AppData\Roaming\FileZilla\
    
  • Windows 10:

    C:\Users\<你的用户名>\AppData\Roaming\FileZilla\
    

在这个目录下,可以找到以下文件:

  • filezilla.xml:包含主要的配置设置。
  • sitemanager.xml:保存站点管理器中的站点信息。
  • bookmarks.xml:保存书签。
  • layout.xml:保存 FileZilla 界面的布局设置。
  • queue.sqlite3:包含传输队列的数据库文件。
  • recentservers.xml:记录最近连接的服务器信息。
  • trustedcerts.xml:保存受信任的证书信息。

复制粘贴到新机器上即可。


在 Windows 10 中重新启用 Windows 照片查看器

虽然 Windows 10 不再默认提供Windows 照片查看器,但它依然隐藏在系统中,只需要通过一些简单的操作就能重新启用。

步骤一:打开注册表编辑器

  1. 按下 Win + R 组合键,调出运行对话框。
  2. 在对话框中输入 regedit,然后按下 Enter 键或点击“确定”按钮。
  3. 如果系统弹出用户账户控制(UAC)提示,选择“是”以允许注册表编辑器进行更改。

步骤二:导航到指定路径

在注册表编辑器中,按照以下路径导航:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations

这段路径指定了 Windows 照片查看器的文件关联设置,在这里手动添加对图片文件格式的支持。

步骤三:添加文件关联

  1. 在右侧的空白区域,右键点击,选择 “新建” -> “字符串值”
  2. 将新建的字符串值命名为文件扩展名。例如,若要为 JPG 文件添加关联,输入 .jpg
  3. 双击刚刚创建的字符串值,并将其数值数据设置为 PhotoViewer.FileAssoc.Tiff。这个数值告诉系统将该文件格式与 Windows 照片查看器关联。

  4. 重复上述步骤,为其他常见的图片格式(如 .jpeg.png.bmp.gif 等)创建字符串值,并同样设置其数据为 PhotoViewer.FileAssoc.Tiff

步骤四:设置默认应用

完成注册表的修改后,还需要将 Windows 照片查看器设置为图片文件的默认打开方式:

  1. 找到一个图片文件(如 .jpg 文件)。
  2. 右键点击该文件,并选择 “打开方式” -> “选择其他应用”
  3. 在弹出的列表中,向下滚动查找并选择“Windows 照片查看器”。
  4. 勾选“始终使用此应用打开 .jpg 文件”以将其设为默认应用。
  5. 点击“确定”。

如何在 macOS 安装 `.cer` 证书文件

  1. 下载证书:
    • 确保已经下载了 XXX-CA.cer 文件。
  2. 打开“钥匙串访问”应用:
    • 在 “聚焦搜索” 中搜索 钥匙串访问,或从“应用程序” -> “实用工具”中打开“钥匙串访问”。
  3. 导入证书:
    • 在“钥匙串访问”窗口中,点击左上角的“文件”菜单,然后选择“导入项目…”。找到并选择你下载的 XXX-CA.cer 文件。
  4. 选择钥匙串:
    • 系统会提示选择将证书存储到哪个钥匙串中。选择将其存储在“系统”钥匙串中。
  5. 调整证书信任设置:
    • 证书导入后,需要设置信任级别。找到刚刚导入的证书(通常会在“系统”钥匙串中显示),双击它以打开证书详细信息。
    • 展开“信任”部分,在“使用此证书时”下拉菜单中选择“始终信任”。
    • 关闭窗口,系统可能会要求输入管理员密码来确认更改。

1 2 3 4 5 6 7 162 163