跳至主要內容

Python 开发环境配置

大约 36 分钟

Python 开发环境配置


安装 Python

Windows

WIndows 下直接到官网下载可执行文件安装即可, 或者下 Anaconda, 从 Anaconda 里装也可以


下载好的 python 安装程序除了手动运行安装外还可以使用命令行来安装, 例如:

python-3.10.6-amd64.exe /quiet InstallAllUsers=1 TargetDir=C:\Python310 PrependPath=1 Include_test=0
  • InstallAllUsers=1 所有用户可用

  • PrependPath=1 添加环境变量

  • TargetDir=C:\Python310: 指定安装目录

  • Include_test=0: 不安装 Python 的测试文件或测试模块。测试文件通常用于开发和测试 Python 本身,而不是用于一般应用程序开发

image-20231010093627141

image-20231010110608749

等待一会儿后新开个 powershell / cmd 窗口验证下:

image-20231010110837513

可以看到已经成功安装在默认目录下且添加了环境变量了

重开 powershell 窗口会重新加载环境变量, 而有时候当前 powershell 窗口可能保存了一些当前需要的临时变量, 重开后就丢失了, 还需要重新操作, 此时也可以通过如下方式, 在不关闭当前 powershell 窗口的前提下重新加载环境变量

  • 如果已经 安装了 Chocolateyopen in new window, 那么可以直接使用 refreshenv 来刷新当前 powershell 窗口的环境变量

    image-20231010142501820

  • 如果没装 Chocolatey 的话也可以在当前 powershell 窗口中执行如下命令来将当前 PowerShell 进程中的 PATH 环境变量设置为与系统环境变量中的 PATH 值相同

    [System.Environment]::SetEnvironmentVariable("Path", [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine), [System.EnvironmentVariableTarget]::Process)
    # 或者使用如下命令也是可以的:
    $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
    

    image-20231010144609439

    • [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine): 从系统环境变量中获取名为 "Path" 的环境变量的值。 [System.Environment] 是 .NET Framework 中的一个类,用于访问系统环境变量。 [System.EnvironmentVariableTarget]::Machine 参数指定了要获取的是计算机级别的环境变量。
    • [System.Environment]::SetEnvironmentVariable("Path", ...):用获取到的系统环境变量值来更新当前 PowerShell 进程中的 PATH 环境变量。[System.Environment]::SetEnvironmentVariable 方法用于设置环境变量的值。它接受三个参数:
      • 第一个参数是要设置的环境变量的名称,这里是 "Path",表示 PATH 环境变量。
      • 第二个参数是要设置的新值,它使用了之前获取的系统环境变量的值,确保当前进程中的 PATH 与系统环境变量中的 PATH 一致。
      • 第三个参数是指定了要设置的环境变量的范围,这里是 [System.EnvironmentVariableTarget]::Process,表示将更改应用于当前进程。


pip 操作

# 将包安装到指定路径(示例)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  pygame --target=C:/Users/233/AppData/Local/Programs/Python/Python38/Lib/site-packages

离线迁移 python 库

python - How to install packages offline? - Stack Overflow --- python - 如何离线安装软件包? - 堆栈溢出open in new window

pip download - pip documentation v23.2.1 --- pip 下载 - pip 文档 v23.2.1 (pypa.io)open in new window

要在一台断网的机器上安装 python 库的话, 可以现在一台联网的机子上下载所需的 whl 包, 然后拷贝到断网机器中来安装

PS: 两台机器需要有相同的系统以及相同的 python 以及 pip 版本

对于需要安装的库可以现在联网的机器上新建并 CD 到一个空目录, 然后执行如下命令

mkdir pip 
cd pip
pip download pip
mkdir wheel
cd wheel
pip download wheel
mkdir [pkg_name]
cd [pkg_name]
pip download [pkg_name]

这会在当前命令行目录下新建一堆包目录, 每个包目录都尤其相关的 whl 依赖, 将这些目录拷贝到离线主机的某个目录中, 并在 powershell 中 cd 到该目录, 运行如下命令即可安装这些包

$packages = Get-ChildItem -Directory
foreach ($package in $packages) {
    $package_name = $package.Name
    $package_path = $package.FullName
    Write-Host "Install package: $package_name"
    Write-Host "Package path: $package_path"
    pip install --no-index --find-links $package_path $package_name
}
  • --no-index: 忽略包索引(只查看 --find-links URL)
  • --find-links:
    • 如果是 html 文件的 URL 或路径,则解析指向存档的链接,例如 sdist (.tar.gz) 或wheel (.whl) 文件。
    • 如果是本地路径或 file:// URL,则在目录列表中查找档案。
    • 不支持指向 VCS 项目 URL 的链接

image-20231010155816398

要逐个包安装的话也是如此:

pip install --no-index --find-links /path/to/download/dir/ [pkg_name]

image-20231010153724106


PS: 上述是逐个梳理依赖的情况, 如果有完整的 requirements 的话就比较方便了, 首先是在联网主机上下载这些依赖

pip download -r .\requirements.txt

image-20231010160410354

将该目录拷贝到离线主机上后执行如下命令

pip install --no-index --find-links [targer_path] -r [requirements.txt_path]

image-20231010160725345


换源操作

winrey/EasyConnectedInChina: 汇总apt,pip,nodejs等各种工具国内镜像源和设置镜像源的方法 (github.com)open in new window

# 单独使用
py -3.8 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencc  
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencc  

# 通过文件安装依赖
py -3.8 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

# 更新 pip
py -3.8 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
  • 镜像源地址
    • 阿里云
      https://mirrors.aliyun.com/pypi/simple/
    • 中国科技大学
      https://pypi.mirrors.ustc.edu.cn/simple/
    • 豆瓣(douban)
      http://pypi.douban.com/simple/
    • 清华大学
      https://pypi.tuna.tsinghua.edu.cn/simple/
    • 中国科学技术大学
      http://pypi.mirrors.ustc.edu.cn/simple/
  • 补充:将包装到指定路径:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  pygame --target=C:/Users/233/AppData/Local/Programs/Python/Python38/Lib/site-packages
    

源地址

  • 官方源

    https://pypi.python.org/simple

  • 阿里云

    https://mirrors.aliyun.com/pypi/simple/

  • 中国科技大学

    https://pypi.mirrors.ustc.edu.cn/simple/

  • 豆瓣(douban)

    http://pypi.douban.com/simple/

  • 清华大学

    https://pypi.tuna.tsinghua.edu.cn/simple/

  • 中国科学技术大学

    http://pypi.mirrors.ustc.edu.cn/simple/


使用方法

方法一:临时使用

直接在pip后加-i后跟这次使用的源即可,例:

pip install web.py -i https://mirrors.aliyun.com/pypi/simple/

指令中的网址为上方的源地址。

如果出现带有trusted-host字样的报错,这是由源不为 https 协议导致的,使用:

pip install web.py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

添加信任主机即可。


方法二:更改默认源

可以使用

# 获取当前默认源
pip config get global.index-url
# 设置默认源
pip config set global.index-url xxxx
# 例如更改为清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
# 改回官方源
pip config set global.index-url https://pypi.python.org/simple

来设置 xxxx

查看当前 pip 配置

pip config list

image-20220526200452483

# 备份
global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'
install.trusted-host='pypi.tuna.tsinghua.edu.cn'

创建或修改配置文件(一般都是创建)

  • linux与mac的设置的文件在 ~/.pip/pip.conf

  • vim ~/.pip/pip.conf
    
  • windows在 %HOMEPATH%\pip\pip.ini

  • 如果没有创建即可。

更改内容:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com

文件中的网址为上方的源地址。 刚刚下面的内容是http协议源的实例。需要添加信任。 保存退出即可。


方法三:python代码更改安装源

临时使用其他源安装软件包的python脚本如下:

#!/usr/bin/python
 
import os
 
package = raw_input("Please input the package which you want to install!\n")
command = "pip install %s -i https://mirrors.aliyun.com/pypi/simple/" % package
# http源的代码实例如下
# command = "pip install %s -i http://pypi.mirrors.ustc.edu.cn/simple --trusted-host pypi.mirrors.ustc.edu.cn" % package
os.system(command)

环境/依赖版本管理工具


virtual environment

# 安装 virtualenv
pip install virtualenv

# 使用 virtualenv 创建虚拟环境
virtualenv -p python3 env

# 激活虚拟环境(Windows)
.\env\Scripts\activate

# 激活虚拟环境(Linux)
source env/bin/activate

这里的 -p python3 中的 python3 具体会创建什么版本的 python 环境, 只需要在当前命令行中 python3 -V 看一下就知道了

相应的要创建什么版本的 python 环境, 也可以直接将 python3 环境指定环境 python 解释器的路径, 例如

virtualenv -p /usr/bin/python3.11 env

PS: 使用 conda 环境的 python 创建虚拟环境时最好进入 conda activate [env_name] 然后再使用 virtualenv -p python [env_name] 来创建, 直接使用 conda python 路径创建可能会卡住

  • 在 Win 中对应环境变量中路径下匹配到的首个 python.exe, 相应的 python3 就对应的是第一个匹配到的 python3.exe, 可以使用如下命令确认:

    python -V
    python3 -V
    
    python
    >>> import sys
    >>> print(sys.executable)
    

    image-20231109144745689

  • 在 Linux 中对应的即为 /usr/bin/python 符号链接指向的 python 程序, linux 中要修改的话修改相应 /usr/bin/pythonxx 符号链接对应的 python 程序路径即可

    image-20231109145155632


Pipenv

这里记录的是 ubuntu 下的配置
Windows 的话 Pycharm 中有自带的 Pipenv 包

如何开始使用 Pipenv? | w3c笔记 (w3cschool.cn)open in new window

WSL Ubuntu 18.04上使用pipenv的4个关键点 | 老梅笔记 (laomeinote.com)open in new window

Pipenv: Python Dev Workflow for Humans — pipenv 2021.11.9 documentation (pypa.io)open in new window

12. Virtual Environments and Packages — Python 3.10.0 documentationopen in new window

Pipenvopen in new window 是 Python 的 Python 打包工具,是对使用 Pipopen in new windowVenvopen in new window 和 requirements.txt的升级。Pipenv 是将包管理与虚拟环境相结合的好方法。

虚拟环境是一个自包含的目录树,其中包含针对特定 Python 版本的 Python 安装,以及许多其他包。

安装 pipenv 模块:

apt install pipenv
pip insatll pipenv

使用 cd 命令切换到需要安装虚拟环境的目录安装虚拟环境(如果当前目录下没有 Pipfile 则会先生成 Pipfile, 如果有的话便会继续安装虚拟环境):

pipenv install

Pipfile 中将 [[source]] 区域下的 url 改为国内的源

# 华为镜像
https://repo.huaweicloud.com/repository/pypi/simple
# 阿里镜像
https://mirrors.aliyun.com/pypi/simple
# 官方源
https://pypi.python.org/simple

image-20211114221709756

如果默认生成的 Pipfile 中的包特别多, 那么这条命令会执行很长时间且没有 log, 这将会是一个很折磨的过程(

启动虚拟环境

pipenv shell

可以通过 exit 退出虚拟环境


Poetry

Poetry - Python dependency management and packaging made easy (python-poetry.org)open in new window

python-poetry/poetry: Python dependency management and packaging made easy. (github.com)open in new window


Poetry 是 Python 的依赖管理器

Poetry 可以帮助您声明、管理和安装 Python 项目的依赖项,确保到处都有正确的 stack。

支持 python 3.7 +


系统需求

需求 Python 2.7 或 3.5+. 支持跨平台, 在 Windows, Linux, OSX 系统上都可以同样出色地运行;

Python 2.7 以及 3.5 后续版本不再支持, 需要升级 Python 版本
个人建议 Python 3.8 以上, 因为用 Python 3.7.3 安装报错了


安装

Introduction | Documentation | Poetry - Python dependency management and packaging made easy (python-poetry.org)open in new window


Poetry 提供了一个自定义的安装程序, 通过解构 Poetry 的依赖关系, 将 Poetry 与系统的其他部分隔离开


Windows

windows powershell install instructions:

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

image-20220527065741632

上图中使用的是旧版的 1.x 版本的安装链接: https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py, 新版本推荐使用 https://install.python-poetry.org 来安装

建议在安装Python之前系统优先的Python不要是conda环境, 也就是说最好系统优先的 Python 环境是自己手动安装的标准 Python 环境

PS: 因为我没装标准Python环境直接用 conda 出问题了, poetry 安装位置会乱飞还会找不到dll

image-20220804101533439

使用 poetry --version 报错的话需要手动加下环境变量, 如上图所示的目录加到系统变量的 path 变量中即可

image-20220804101836027

image-20220804101729257


urllib.error.URLError: <urlopen error unknown url type: https>

如果出现以上错误, 那可能是因为默认 Python 版本比较低, 建议使用 3.8 以上的版本

poetry 会自动添加环境变量, 安装完后重启 powershell, 检查下 poetry 版本:

poetry --version

image-20220527070102934



配置文件

Configuration | Documentation | Poetry - Python dependency management and packaging made easy (python-poetry.org)open in new window


  • macOS: ~/Library/Application Support/pypoetry
  • Windows: C:\Users\<username>\AppData\Roaming\pypoetry

可以通过:

poetry config virtualenvs.in-project true

来让 poetry 默认在项目根目录下创建 venv 作为虚拟环境目录, 或者直接写配置文件:

[virtualenvs]
in-project = true

此项配置默认为 false

若在配置此项之前创建了虚拟环境, windows 下应该在 C:\Users\用户名\AppData\Local\pypoetry\Cache\virtualenvs 目录下, 将其删除后重新在项目根目录下 poetry install 即可在项目根目录下创建 .venv 作为虚拟环境目录


pyproject.toml

换源

The pyproject.toml file | Documentation | Poetry - Python dependency management and packaging made easy (python-poetry.org)open in new window

Poetry 默认配置从 PyPI 查询依赖包, 如果想要使用私仓(或是镜像)的话需要如如下配置

[[tool.poetry.source]]
name = "private"
url = "http://example.com/simple"

例如:

[[tool.poetry.source]]
name = "aliyun"
url = "http://mirrors.aliyun.com/pypi/simple"
default = true
[[tool.poetry.source]]
name = "tsinghua"
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
default = true

基本用法


安装依赖

Python - poetry(5) 依赖规范 (win80.net)open in new window

使用 Python Poetry 进行依赖管理-云社区-华为云 (huaweicloud.com)open in new window

Python依赖管理及打包工具Poetry使用规范 - 掘金 (juejin.cn)open in new window

对于一个用 poetry 设置 python 环境的项目, 其根目录下有 poetry 的pyproject.toml 即可通过 poetry install 来安装该项目所需的依赖, 如果发现卡主或是其他问题, 可以使用 poetry -vvv install 以在安装依赖时查看更详细的调试信息


可以在 pyproject.tomltool.poetry.dependencies 区域指明依赖版本

image-20220527073752137

也可以通过 poetry add 来安装依赖

poetry add numpy

使用虚拟环境

默认情况下, poetry 会在 {cache-dir}/virtualenvs ({cache-dir}\virtualenvs on Windows)目录下创建一个虚拟环境:

image-20220527074613612

如果先前设置了 poetry config virtualenvs.in-project true 的话执行 poetry install 安装依赖则会装在项目根目录的 .venv

激活虚拟环境: cd 进入 .venv 然后使用 poetry shell 激活虚拟环境


结合 conda 环境使用

poetry 可以直接使用 conda 环境而不单独创建虚拟环境

只需要先 activate 对应 conda 环境, 然后把 pyproject.toml 中的 python 版本对其当前 conda 环境版本即可

此时使用 poetry shell 会输出 Virtual environment already activated: xxxxxx

不过当然也可以使用 conda 环境来创建虚拟环境, 只需要使用 poetry env use 对应conda环境的python.exe路径 即可利用该 conda 环境创建虚拟环境

在当前 conda 环境的 bin 目录中找不到 activate 脚本导致环境激活失败(ubuntu)

在该 conda 环境的 bin 目录下新建一个 activate 文件, 写入如下代码然后重新 poetry shell 即可

#!/bin/sh
_CONDA_ROOT="/root/anaconda3/envs/xxx"	# 该 conda 环境根目录
# Copyright (C) 2012 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
\. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
conda activate "$@"

奇怪的是虽然没有 activate 脚本, 但是直接 conda activate 是有用的


常见问题

Failed to create the collection: Prompt dismissed..

Error: Unable to store the password for poetry-repository-pypi in the key ring: Failed to unlock the collection! · Issue #2692 · python-poetry/poetry (github.com)open in new window

python poetry 1.0.0 private repo issue fix – Frank-Mich's Blogopen in new window

# test.py
import keyring
print(keyring.util.platform_.config_root())
poetry run python test.py

打开输出的文件目录(不存在则创建), 新建一个 keyringrc.cfg, 填入

[backend]                                    
default-keyring=keyring.backends.fail.Keyring

卡 keyring

Poetry blocks on "Pending..." during installation · Issue #6050 · python-poetry/poetry (github.com)open in new window

有时候 poetry install 会一只卡 pending, 此时需要查看一些调试信息, 可以使用 poetry -vvv install 来查看更多运行时信息, 如果发现是卡在 keyring 上, 可以运行如下命令

export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring

然后重新 poetry -vvv install 即可

企业微信截图_17131654242132


python 版本不对

比如这个仓库需要 python 3.10 以上的 python 版本, 这里虽然我全局 python 目前是 3.10, 但是 poetry 当时是 python 3.8 版本安装的, 使用了当时全局的 python 3.8 环境

image-20240507224630840

因此这里需要将 poetry 的默认 python 版本指向 python3.10

# 查看 poetry 当前使用的 python 版本(在带 pyproject.toml 的目录下执行)
poetry env info

image-20240507230153035

# 为 poetry 指定需要使用的 python 环境
poetry env use [python可执行程序路径]
# PS: 如果需要使用的就是当前全局的 python 的话也可以直接
poetry env use python

image-20240507230346854


PDM

pdm-project/pdm: A modern Python package manager with PEP 582 support. (github.com)open in new window

PDM - 一款新的 Python 包管理器 | Frost's Blog (frostming.com)open in new window

pdm/README_zh.md at main · pdm-project/pdm (github.com)open in new window

官方文档已经讲得很详细了, 这里摘录下来方便个人阅读

持续集成中的 Python - 狂飙 (networm.me)open in new window

PDM 是由 Poetry 开发组的成员开发的( •̀ ω •́ )✧


概述

PDM 旨在成为下一代 Python 软件包管理工具。它最初是为个人兴趣而诞生的。如果你觉得 pipenv 或者 poetry 用着非常好,并不想引入一个新的包管理器,那么继续使用它们吧;但如果你发现有些东西这些 工具不支持,那么你很可能可以在 pdm 中找到。

PEP 582open in new window 提出下面这种项目的目录结构:

foo
    __pypackages__
        3.8
            lib
                bottle
    myscript.py

项目目录中包含一个__pypackages__目录,用来放置所有依赖的库文件,就像npmnode_modules一样。 你可以在这里open in new window阅读更多提案的细节。


主要特性


为什么不用虚拟环境

现在大部分的 Python 包管理器也同时管理虚拟环境,这主要是为了隔离项目开发环境。但如果涉及到虚拟 环境嵌套虚拟环境的时候,问题就来了:你可能用一个虚拟环境的 Python 安装了某个虚拟环境管理工具, 然后又用这个工具去创建更多虚拟环境。当某一天你升级了新版本的 Python 你必须一个一个去检查这些 虚拟环境,没准哪个就用不了了。

然而 PEP 582open in new window 提供了一个能把 Python 解释器和项目开发环境解耦的方法。这是一个相对比较新的提案, 没有很多相关的工具实现它,这其中就有 pyflowopen in new window。但 pyflow 又是用 Rust 写的,不是所有 Python 的社区 都会用 Rust,这样就没法贡献代码,而且,基于同样的原因,pyflow 并不支持 PEP 517open in new window 构建。


安装

pdm/README_zh.md at main · pdm-project/pdm (github.com)open in new window


安装 PDM 需要 Python 3.7 或更高版本

但是运行 PDM 没有 Python 版本要求

Linux/Mac
curl -sSL  https://ghproxy.com/https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -

QuickStart

初始化一个新的 PDM 项目:

新建一个项目文件夹, 在当前文件夹目录下打开 powershell:

pdm init

按照指引回答提示的问题,一个 PDM 项目和对应的pyproject.toml文件就创建好了。

image-20220526212055852

把依赖安装到 __pypackages__ 文件夹中

pdm add tk

# 删除则可用:
pdm remove tk

working with PEP 582

推荐在 .gitignore 中忽略

__pypackages__/
.pdm.toml

对于 VSCode, 可以先用命令行安装 pdm-vscode:

pdm plugin add pdm-vscode

安装完后, 在输入 pdm init 或者 pdm use 命令后会自动创建 .vscode/settings.json

{
  "python.autoComplete.extraPaths": ["__pypackages__/<major.minor>/lib"],
  "python.analysis.extraPaths": ["__pypackages__/<major.minor>/lib"]
}


需要结合 pylance 使用的话需要在项目根目录创建一个 pyrightconfig.json:

{
    "exclude": ["__pypackages__"]
}

PDM Scripts

例如运行 main.py 可以使用

Windows
pdm run python main.py

PDM-packer

frostming/pdm-packer: A PDM plugin that packs your packages into a zipapp (github.com)open in new window


A PDM plugin that packs your packages into a zipapp


pdm-packer requires Python >=3.7


安装:

pdm plugin add pdm-packer

image-20220526214016279


使用:

$ pdm pack [common-options] [pack-options]

Common Options:

-h, --help

show this help message and exit

-v, --verbose

-v for detailed output and -vv for more detailed

-g, --global

Use the global project, supply the project root with -p option

-p PROJECT_PATH, --project PROJECT_PATH

Specify another path as the project root, which changes the base of pyproject.toml and __pypackages__

Pack Options:

-m MAIN, --main MAIN

Specify the console script entry point for the zipapp

-o OUTPUT, --output OUTPUT

Specify the output filename. By default the file name will be inferred from the project name.

-c, --compress

Compress files with the deflate method, no compress by default

--pyc, --compile

Compile source into pyc files

--no-py

Remove the .py files in favor of .pyc files

-i INTERPRETER, --interpreter INTERPRETER

The Python interpreter path, default: the project interpreter

--exe

Create an executable file. If the output file isn't given, the file name will end with .exe(Windows) or no suffix(Posix)

See also: https://docs.python.org/3.9/library/zipapp.html


示例:

# Create with default name(<project_name>.pyz) and console_script as the __main__.py
pdm pack
# Create an executable file
pdm pack --exe
# Create with custom __main__.py and filename
pdm pack -o app.pyz -m app:main

Anaconda

Anaconda 安装完成后调起命令行会默认启动 conda 环境, 可以使用如下命令开启或关闭该项配置

# 关闭自动启动conda环境
conda config --set auto_activate_base false
# 启动自动启动conda环境
conda config --set auto_activate_base true

创建一个名为 BigData, python 版本为 3.9 的虚拟环境

conda create -n BigData python=3.9

激活 BigData conda 环境

conda activate BigData

20211219072053

退出当前虚拟环境

conda deactivate

Conda clean 净化Anaconda - 简书 (jianshu.com)open in new window
Anaconda conda常用命令:从入门到精通_chenxy_bwave的专栏-CSDN博客_conda常用命令open in new window
Anaconda 官网open in new window
可在此处获取其他版本的安装包

Windows

需要注意的是, 使用 Anaconda Navigator 或者 conda 环境操作时需要关掉梯子, 否则可能会报 host 错误

安装包open in new window

Anaconda 官网open in new window
可在此处获取其他版本的安装包

需要注意的是 Anaconda 装完之后打开命令行总会自动进入 conda 环境, 可以通过更改 conda 配置来取消自动进入

conda config --set auto_activate_base false

如果想要设置自动进入的话将 false 改为 true 运行即可

安装完成后打开 Anaconda Navigator:

image-20220523093633147

Anaconda 换源

anaconda修改国内源 - 余者皆可 - 博客园 (cnblogs.com)open in new window

Anaconda 换国内源_scl52tg的博客-CSDN博客_conda 换源open in new window

  • 打开 anaconda prompt
    20220113131937
    20220113132007

  • 执行以下命令来配置清华源:

    不打开 navigator 也是完全可行的, 打开命令行就可以了, 前提是为 anaconda 配置了环境变量

    只要在命令行中 conda -V 有版本号输出就可以了

    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --set show_channel_urls yes
    

    配置清华源是为了后续使用 pip 命令安装 python 库时快些, 不配置换源而直接使用默认源的话在墙内容易超时报错

    中科大源:

    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
    conda config --set show_channel_urls yes
    
    

    需要注意的是 conda 换源后会使更新 conda 的操作可能会报错

    因此在更新 conda 的时候记得回复默认源

    conda config --remove-key channels
    

    查看源:

    conda config --show
    

    image-20220804012242625


新建一个 conda 环境

打开 Anaconda Navigator -> Environments 在环境列表底部按钮中找到 Create 并点击

image-20220517153334579

为新环境命一个名(英文命名, 尽量简短些, 之后激活要用)

这里选择了 Python 3.8.13, 不上 3.9 或者 3.10 主要是因为有一些三方库更新没跟上, 不一定支持 python3.9 及以上

image-20220517153442365

在命令行中使用 conda 环境可以使用如下指令激活:

conda activate 环境名

image-20220517153733464


Anaconda Navigator 升级

conda update conda -y
conda update anaconda -y
conda update anaconda-navigator -y

如果进行了换源操作记得在升级前恢复默认源, 否则可能会在镜像源中找不到更新包

conda config --remove-key channels

Ubuntu

如何在 Ubuntu 20.04 上安装 Anaconda - 云+社区 - 腾讯云 (tencent.com)open in new window
Anaconda conda常用命令:从入门到精通_chenxy_bwave的专栏-CSDN博客_conda常用命令open in new window

# 安装 Anaconda
#wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
#bash Anaconda3-2021.11-Linux-x86_64.sh
wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
bash Anaconda3-2022.05-Linux-x86_64.sh

20211219065157

若出现 段错误 (核心已转储) 字样, 可以使用

wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh

从断点处继续下载

长按 ENTER 阅读完条款

20211219065309

yes

20211219065431

选择安装路径, 默认为 /root/anaconda3, 这个过程会比较长

20211219065943

yes, 执行初始化, 这将会将命令行工具 conda 添加到系统的 PATH 环境变量中。
不过想要激活 Anaconda,还需要关闭并且重新打开你的 shell 或者在当前 shell 会话中输入下面的命令,来重新加载 PATH 环境变量:

source ~/.bashrc

可以使用 conda --version 查看 Anaconda 版本

20211219070617

设置国内镜像

#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
#设置bioconda
conda config --add channels bioconda
conda config --add channels conda-forge
#设置搜索时显示通道地址
conda config --set show_channel_urls yes

创建一个名为 BigData, python 版本为 3.9 的虚拟环境

conda create -n BigData python=3.9

激活 BigData 虚拟环境

conda activate BigData

20211219072053

退出当前虚拟环境

conda deactivate

Conda clean 净化Anaconda - 简书 (jianshu.com)open in new window
Anaconda conda常用命令:从入门到精通_chenxy_bwave的专栏-CSDN博客_conda常用命令open in new window
Anaconda 官网open in new window
可在此处获取其他版本的安装包


报错收集


check_hostname requires server_hostname

  • 本来是在 Pycharm 中新建 conda 环境报的错误,接着打开 Anaconda Navigator 也报了相同的错误
  • 最终在anaconda-issues #12410open in new window找到的相同报错及解决方案
    • 关掉VPN即可解决(

对于 Clash 而言可以打开此项配置

image-20230719000029091

bpo-42627: Fix wrong parsing of Windows registry proxy settings by CrazyBoyFeng · Pull Request #26307 · python/cpython · GitHubopen in new windowopen in new window

开了之后就正常了:

image-20230719000057721


各类 HTTPError 相关

我这边报错都是清华的源报错,换成阿里的源就没问题了(

  • https://mirrors.aliyun.com/anaconda/pkgs/main/

    20210522090710


ModuleNotFoundError: No module named 'pip._vendor....'

  • pip 出问题了
  • CMD.exe Prompt 中执行 conda update pip 即可

VSCode

VSCode 安装包open in new window

用于编辑与运行 python 程序, 选择 VSCode 主要是其比较轻量, 启动比较快, 用起来比较顺手, 且插件市场庞大, 对于许多语言都有插件支持, 按需下载

比起安装 python 解释器自带的 IDLE 友好许多, 又不会像 Pycharm 一样庞大/启动慢/占资源, 作为平时写点小脚本, 小玩意儿来说完全够用

扩展

  • 汉化插件

    image-20220113132736972

  • Python 相关基础插件

    image-20220113132900552

  • jupyter 插件

    image-20220113132930881

    使用 Jupyter 的好处在于可以边写笔记边写代码, 如下图所示, 在笔记中可以插入代码块并运行及显示

    image-20220113133105876

  • Markdown 插件

    image-20220113133332281

  • 命令行插件 Terminal

    image-20220113134443536

    用于在 VSCode 中打开 powershell 执行命令

    image-20220113134623777


Pylance 无法加载自定义模块

有时 Pylance 可能会识别不了 import 导入的自定义包, 此时需要设置 VScode Pylance 的 python.analysis.extraPaths 属性, 加上自定义包的所在目录

可以在设置中添加:

image-20230728120654244

也可以直接在当前工作目录下新建一个 .vscode/settings.json 进行配置:

{
    "python.analysis.extraPaths": [
        "/usr/local/python37/lib/python3.7/site-packages",
    ]
}

然后就可以 Pylance 正常加载相关包了

有时候可能仍旧索引不到相关模块, 那么可以将层级写深点, 不止于 site-packages, 而是写到模块 py 文件所在目录


生成环境依赖

python 项目自动生成环境配置文件requirements.txt_凝眸伏笔的博客-CSDN博客open in new window


  • 生成整个当前环境的依赖

    pip freeze > requirements.txt
    

如果对项目使用了虚拟环境那么这会是一个生成项目依赖的不错的方法

  • 生成当前项目的依赖

    pip install pipreqs
    pipreqs .
    

Pycharm

Pycharm 换源

20210522085736

实际上这里我用的 conda环境 ,相应的也可以在 anaconda 中进行换源配置


快捷键

查找替换

  • Ctrl + R 替换
  • Ctrl + Shift + R 全局替换

无意中触发了TIM快捷键:``Ctrl+Alt+F`(文字识别)

创建文档注释脚本

  • File -> Settings -> Editor -> File and Code Templates

    • 例:Python Script

      • 例:

        # -*- coding: utf-8 -*-
        # @Time    : ${DATE} ${TIME}
        # @Author  : 咸鱼型233
        # @File    : ${NAME}.py
        # @Software: ${PRODUCT_NAME}
        

导入自己的模块报红

  • 参考文章open in new window
  • 结论:
    • 本地路径并未被标记“源目录”
  • 解决方案:
    • File | Settings | Build, Execution, Deployment | Console | Python Console
      • 勾选"Add source roots to PYTHONPAT"
    • 当前程序根目录右键->“Mark Directory as”->“Sources Root”

PEP8 代码规范检查


JupyterLab

接触 VSCode 的 Jupyter 插件后感觉还是 VSCode + Jupyter 比较好用, 一方面 VSCode 可以安装许多插件作为编码的辅助工具, 另一方面, 单个 .ipynb 文件也比较方便编辑


简介

  • JupyterLab,极其强大的下一代notebook!open in new window[原文链接]
  • JupyterLab是Jupyter主打的最新数据科学生产工具,某种意义上,它的出现是为了取代Jupyter Notebook。不过不用担心Jupyter Notebook会消失,JupyterLab包含了Jupyter Notebook所有功能。
  • JupyterLab作为一种基于web的集成开发环境,你可以使用它编写notebook、操作终端、编辑markdown文本、打开交互模式、查看csv文件及图片等功能。
  • 可以把JupyterLab当作一种究极进化版的Jupyter Notebook。原来的单兵作战,现在是空陆空联合协作。
  • Jupyter有如下特点
    • 交互模式:Python交互式模式可以直接输入代码,然后执行,并立刻得到结果,因此Python交互模式主要是为了调试Python代码用的
    • 内核支持的文档:使你可以在可以在Jupyter内核中运行的任何文本文件(Markdown,Python,R等) 中启用代码
    • 模块化界面:可以在同一个窗口同时打开好几个notebook或文件(HTML, TXT, Markdown等等) ,都以标签的形式展示,更像是一个IDE
    • 镜像notebook输出:让你可以轻易地创建仪表板
    • 同一文档多视图:使你能够实时同步编辑文档并查看结果
    • 支持多种数据格式:你可以查看并处理多种数据格式,也能进行丰富的可视化输出或者Markdown形式输出
    • 云服务:使用Jupyter Lab连接Google Drive等服务,极大得提升生产力

使用

  • Anaconda自带,直接在HomeLaunch即可
    image-20221107224451336

  • 启动完之后会发现默认启动路径是电脑用户根目录,可以将其改到一个自己觉得合适的目录,操作如下

      pip install -i https://mirrors.aliyun.com/pypi/simple/ zmq
    
    • 生成配置文件

      Jupyter notebook --generate-config
      
      • 若成功则会显示Writing default config to: 文件路径

        • 打开该文件路径指向的文件,利用Ctrl+f找到c.NotebookApp.notebook,将其#注释删除,在''中填入自己认为合适的启动路径

        我这里是C:\Users\233\.jupyter\jupyter_notebook_config.py

        • 记得保存文件
    • 再次在HomeLaunch启动JupyterLab确认配置情况 20210401094701


插件

  • 环境准备

    • 打开cmd prompt或者Powershell prompt
      image-20221107224622026

      • 安装npm

        pip install -i https://pypi.tuna.tsinghua.edu.cn/simple npm
        
      • 安装nodejs

        conda install -c conda-forge nodejs
        
    • 不要yarnnpm换淘宝的源
      • 淘宝源里没有JupyterLab相关的插件,下载插件时会404
  • 安装插件

    • JupyterLab可视化界面中安装
      image-20221107224757341

    会有安装提示installrebuild

    • 安装好并且rebuild之后若左侧栏目未正常显示该插件则先关闭JupyterLab再重新启动看看有没有正常加载,若仍未正常显示则可以看看下面这条
  • 反复安装与卸载插件可能会导致插件无法正常加载的错误

    • 错误发现:

      • Anaconda中运行cmd prompt或者Powershell prompt

        jupyter labextension list
        

        并回车,会给出Known labextensionsUninstalled core extensions

        • 若一个插件同时在两项中出现则其无法正常加载
    • 错误解决方法

      • 找到JupyterLab插件build的配置文件
        • 位置在
          • <conda_root>/envs/<env_name>/share/jupyter/lab/settings/build_config.json
        • JupyterLab的环境conda的默认的root环境,则位置在
          • <conda_root>/share/jupyter/lab/settings/build_config.json

插件推荐


@kiteco/jupyterlab-kite
  • Python代码提示

  • Anaconda中安装Spyder的时候一般会引导下载Kite

    • image-20221107224953401
  • 使用效果

    • image-20221107224914859
  • 安装

    • Prompt安装

      • 打开AnacondaPrompt

        pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyter-kite
        jupyter labextension install @kiteco/jupyterlab-kite
        
      • 重启JupyterLab即可


快捷键


命令模式 (按键 Esc 开启)

Enter 转入编辑模式

Shift-Enter 运行本单元,选中下个单元

Ctrl-Enter 运行本单元

Alt-Enter 运行本单元,在其下插入新单元

Y 单元转入代码状态

M 单元转入markdown状态

R 单元转入raw状态

1 设定 1 级标题

2 设定 2 级标题

3 设定 3 级标题

4 设定 4 级标题

5 设定 5 级标题

6 设定 6 级标题

Up 选中上方单元

K 选中上方单元

Down 选中下方单元

J 选中下方单元

Shift-K 扩大选中上方单元

Shift-J 扩大选中下方单元

A 在上方插入新单元

B 在下方插入新单元

X 剪切选中的单元

C 复制选中的单元

Shift-V 粘贴到上方单元

V 粘贴到下方单元

Z 恢复删除的最后一个单元

D,D 删除选中的单元

Shift-M 合并选中的单元

Ctrl-S 文件存盘

S 文件存盘

L 转换行号

O 转换输出

Shift-O 转换输出滚动

Esc 关闭页面

Q 关闭页面

H 显示快捷键帮助

I,I 中断Notebook内核

0,0 重启Notebook内核

Shift 忽略

Shift-Space 向上滚动

Space 向下滚动


编辑模式 ( Enter 键启动)

Tab 代码补全或缩进

Shift-Tab 提示

Ctrl-] 缩进

Ctrl-[ 解除缩进

Ctrl-A 全选

Ctrl-Z 复原

Ctrl-Shift-Z 再做

Ctrl-Y 再做

Ctrl-Home 跳到单元开头

Ctrl-Up 跳到单元开头

Ctrl-End 跳到单元末尾

Ctrl-Down 跳到单元末尾

Ctrl-Left 跳到左边一个字首

Ctrl-Right 跳到右边一个字首

Ctrl-Backspace 删除前面一个字

Ctrl-Delete 删除后面一个字

Esc 进入命令模式

Ctrl-M 进入命令模式

Shift-Enter 运行本单元,选中下一单元

Ctrl-Enter 运行本单元

Alt-Enter 运行本单元,在下面插入一单元

Ctrl-Shift– 分割单元

Ctrl-Shift-Subtract 分割单元

Ctrl-S 文件存盘

Shift 忽略

Up 光标上移或转入上一单元

Down光标下移或转入下一单元


更多JupyterLab快捷键参考open in new window


pipx

pipx (pypa.github.io)open in new window

pypa/pipx: Install and Run Python Applications in Isolated Environments (github.com)open in new window


安装

pip install pipx --user pipx

image-20220526203216819

提示需要将路径添加到 PATH, 这个可以让 pipx 来完成

首先 cd 到安装 pipx 的目录, 然后执行 ./pipx ensurepath:

image-20220526203255502


然后重启终端输入 pipx 看看有没有反馈信息

如果有回显信息:

image-20220526205728337

那么说明成功了

如果没有的话则需要手动将 C:\Users\233\AppData\Roaming\Python\Python38\Scripts(以我上面安装pipx的路径为例) 添加到环境变量的 PATH 变量中


概述

Pipx 是一个帮助您安装和运行用 Python 编写的最终用户应用程序的工具。它大致类似于 macOS 的 brew,JavaScript 的 npx,和 Linux 的 apt。

它与 pip 密切相关。实际上,它使用 pip,但是它专注于安装和管理可以从命令行直接作为应用程序运行的 Python 包。


pipx 与 pip 的区别

Pip 是一个通用的包安装程序,用于没有环境隔离的库和应用程序。

Pipx 是专门为应用程序安装而设计的,因为它增加了隔离性,但仍然使应用程序可以在外壳中使用: pipx 为每个应用程序及其相关包创建一个隔离的环境。


pipx 从什么地方安装 app

默认情况下,pipx 使用与 pip 相同的包索引 PyPI。Pipx 还可以从所有其他来源安装 pip can,比如本地目录、 wheel、 git url 等。

Python 和 PyPI 允许开发人员使用“控制台脚本入口点”分发代码。这些入口点允许用户从命令行调用 Python 代码,有效地起到独立应用程序的作用。

Pipx 是一个工具,用于以安全、方便和可靠的方式安装和运行这些数千个包含应用程序的软件包。在某种程度上,它把 pythonpackageindex (PyPI)变成了 Python 应用程序的大型应用程序商店。并不是所有的 Python 包都有入口点,但是很多都有。


ubuntu 16.04 安装 Python 3.8.12

成功了但没完全成功, 不打算再在 ubuntu 16.04 LTS 上整花活了.

PS: 2022-8-5: 成功了, 详见 [Ubuntu 16.04 LTS 配置Jupyter服务](#Ubuntu 16.04 LTS 配置Jupyter服务)

Ubuntu 16.04 安装 python3.8 - 老虎死了还有狼 - 博客园 (cnblogs.com)open in new window

PS: VSCode 用 Python Environment Manager 扩展获取最新 Python 环境也是可以的(推荐使用此项, 一键安装免配置, 懒人解法)

20220803 ubuntu16.04LTS Python Environment Managerv1.0.4 拉取最新 Python 装了个 3.9.13 的 conda 环境

ubuntu 16.04 默认自带 Python2.7 和 Python3.5, 可以通过whereis python 查看

这里选择 3.8.12 属于是保守了, 一方面考虑到 1604 有点老, 另一方面有些三方库也并没有跟上时代


配置依赖环境

apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev

下载 Python3.8.12 压缩包并解压

wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz
# 解压
tar -xf Python-3.8.12.tar.xz
# 进入解压目录
cd Python-3.8.12
# 执行安装(这两步时间会比较长)
./configure prefix=/usr/local/python3
make && make install

image-20220803153339331

# 备份原来的 Python 软链接
mv /usr/bin/python /usr/bin/python.bak
# 修改 python3 软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 验证安装
python -V

image-20220803153520745

# 更新 pip
python -m pip install --upgrade pip
# 验证更新
pip -V

image-20220803154129388


Ubuntu 16.04 LTS 配置Jupyter服务

实验环境: windows 10 使用 root 用户 远程 ubuntu 16.04 LTS 虚拟机

直接使用 VSCode 的 Python Environment Manager扩展获取最新 conda 环境

image-20220810104753103

激活当前 conda 环境 conda activate xxx

安装 jupyter 套件

pip install jupyter
pip install jupyterlab
pip install notebook

打开 VScode 的 settings.json,加上

  "jupyter.jupyterCommandLineArguments": [
    "--allow-root"
  ],

报错收集

ERROR: Could not install packages due to an Environment

Python Failed to write executable - trying to use .deleteme logic 解决方法 | 烟雨平生 (i007it.com)open in new window


如果在 VSCode 中的终端中运行安装库的命令出现类似于如下报错

ERROR: Could not install packages due to an Environment: [WinError 2] 系统找不到指定的文件 : xxxxxxxxx -> xxxxx\\pythonxx\\Scripts\\xxx.exe.deleteme

那么就是权限问题, 请使用管理员方式打开 VSCode