一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python虛擬環(huán)境指南2022版本

 天選小丑 2022-10-01 發(fā)布于廣西

過(guò)去三年中,我都會(huì)發(fā)布一下Python虛擬環(huán)境指南,今年的指南有點(diǎn)晚。如果是新的讀者朋友歡迎點(diǎn)開(kāi)下面鏈接,去查看往年的文章:

  • Python虛擬環(huán)境指南2021版
  • Python虛擬環(huán)境指南2020版
  • Python虛擬環(huán)境指南2019版

去年介紹的pipenv和poetry發(fā)展都還不錯(cuò),從github上看,感覺(jué)數(shù)據(jù)還在伯仲之間。在這兩者之外,新出了一個(gè)名叫 PDM(Python Development Master) 的虛擬環(huán)境工具。國(guó)人出品,3k的star,顏值和文檔都還不錯(cuò),今年就介紹它了。

PDM 介紹

mac 上直接使用 brew install pdm 安裝,其它系統(tǒng)官方提供了一個(gè)一鍵安裝的shell腳本。安裝完成后,創(chuàng)建一個(gè)項(xiàng)目目錄 test-pdm ,在目錄中使用 pdm init 命令初始化項(xiàng)目:

?  test-pdm pdm init
Creating a pyproject.toml for PDM...
Please enter the Python interpreter to use
0. /usr/local/opt/python@3.9/bin/python3.9 (3.9)
1. /Library/Developer/CommandLineTools/usr/bin/python3 (3.8)
2. /Library/Frameworks/Python.framework/Versions/Current/bin/python3.8 (3.8)
3. /usr/local/bin/pypy3.7 (3.7)
4. /usr/local/bin/pypy (2.7)
5. /usr/local/Cellar/pdm/2.1.2/libexec/bin/python3.10 (3.10)
Please select (0): 2
Using Python interpreter: /Library/Frameworks/Python.framework/Versions/Current/bin/python3.8 (3.8)
Would you like to create a virtualenv with /Library/Frameworks/Python.framework/Versions/Current/bin/python3.8? [y/n] (y): y
Virtualenv is created successfully at /Users/yoo/tmp/test-pdm/.venv
Is the project a library that will be uploaded to PyPI [y/n] (n): n
License(SPDX name) (MIT):
Author name (game404):
Author email (studyoo@foxmail.com):
Python requires('*' to allow any) (>=3.8):
Changes are written to pyproject.toml.

pdm比較方便的地方是會(huì)掃描出系統(tǒng)的python解釋器,提示用戶選擇解釋器版本, 比如上面日志顯示有5個(gè)python版本,有點(diǎn)亂:( 。初始化完成后,生成項(xiàng)目描述文件pyproject.toml內(nèi)容如下:

[project]
name = ''
version = ''
description = ''
authors = [
    {name = 'game404', email = 'studyoo@foxmail.com'},
]
dependencies = []
requires-python = '>=3.8'
license = {text = 'MIT'}

[build-system]
requires = ['pdm-pep517>=1.0.0']
build-backend = 'pdm.pep517.api'

當(dāng)然在項(xiàng)目目錄下,也會(huì)創(chuàng)建一個(gè)隱藏的 .venv 目錄,用來(lái)存放解釋器,和其它工具一致。

安裝包之前先使用 pdm config pypi.url https://pypi.tuna./simple 修改pypi的國(guó)內(nèi)源,然后使用 pdm add django安裝包。修改源后,安裝包還是挺快的。查看項(xiàng)目的包,表格化展示:

pdm list
╭────────────────────┬─────────┬──────────╮
│ Package            │ Version │ Location │
├────────────────────┼─────────┼──────────┤
│ asgiref            │ 3.5.2   │          │
│ backports.zoneinfo │ 0.2.1   │          │
│ django             │ 4.1     │          │
│ sqlparse           │ 0.4.2   │          │
╰────────────────────┴─────────┴──────────╯

也可以使用下面命令導(dǎo)出標(biāo)準(zhǔn)配置 requirements.txt 文件和其它工具共享。

pdm export -o requirements.txt

另外發(fā)現(xiàn)一個(gè)pipx的工具,也有點(diǎn)意思,以后有時(shí)間了體驗(yàn)一下。近期go和rust使用比較多,順便也介紹一下這兩個(gè)語(yǔ)言的開(kāi)發(fā)環(huán)境。

go開(kāi)發(fā)環(huán)境

go開(kāi)發(fā)環(huán)境安裝

go在mac環(huán)境下的安裝沒(méi)什么好說(shuō)的,可以直接使用官方提供的安裝包安裝,這里介紹linux下的go環(huán)境安裝。

linux下需要下載對(duì)應(yīng)的版本,需要根據(jù)cpu架構(gòu)選擇,一般情況下選擇amd64架構(gòu)的,下載完成后解壓到 /usr/local 目錄即可:

curl -LO https://v/dl/go1.17.13.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.19.linux-amd64.tar.gz

然后修改一下環(huán)境變量,增加go到系統(tǒng)path(修改后記得重新登錄一下):

# /etc/profile

export PATH=$PATH:/usr/local/go/bin

檢測(cè)go的版本:

# go version
go version go1.17.13 linux/amd64
# whereis go
go: /usr/local/go /usr/local/go/bin/go

go的開(kāi)發(fā)環(huán)境就設(shè)置完成了,非常簡(jiǎn)單, 已經(jīng)不再需要按照一些古老的文檔設(shè)置額外的環(huán)境變量。

go項(xiàng)目依賴

編寫一個(gè)測(cè)試類 main.go :

package main

import 'fmt'

func main() {
    fmt.Println('Hello, World!')
}

運(yùn)行一下:

$ go run main.go
Hello, World!

go使用mod命令管理模塊,初始化項(xiàng)目 mod init example/hello, 其中 example/hello 是我們的包名:

$ go mod init example/hello
go: creating new go.mod: module example/hello
go: to add module requirements and sums:
 go mod tidy

完成后會(huì)形成 go.mod 文件:

module example/hello

go 1.17

對(duì)于項(xiàng)目,可以直接這樣運(yùn)行:

$ go run .
Hello, World!

依賴包的時(shí)候,可以直接在代碼中添加依賴:

...
import 'rsc.io/quote'

func main() {
    fmt.Println(quote.Go())
    ...
}

然后使用mod tidy 自動(dòng)下載和配置依賴項(xiàng):

$ go mod tidy
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

再次運(yùn)行項(xiàng)目,可以得到下面類似python之禪的輸出:

Don't communicate by sharing memory, share memory by communicating.

go版本升級(jí)

go在1.18版本開(kāi)始支持泛型,這是非常重要的一個(gè)特性,我們將剛安裝好的go升級(jí)到1.18版本。

升級(jí)過(guò)程和安裝類似,但是需要先清理掉舊的go版本:

$ rm -rf /usr/local/go

直接修改 main.go 添加一個(gè)泛型的實(shí)現(xiàn):

package main

import 'fmt'
import 'rsc.io/quote'

func say[T string | int](a T) {
 fmt.Println(a)
}

func main() {
    fmt.Println(quote.Go())
 fmt.Println('Hello, World!')
 say('hello')
 say(2022)
}
  • say 函數(shù)支持string和int兩種類型的參數(shù)

再次運(yùn)行項(xiàng)目:

$ go run .
Don't communicate by sharing memory, share memory by communicating.
Hello, World!
hello
2022

記得將  go.mod 中的go版本修改成1.18。

rust開(kāi)發(fā)環(huán)境

rust開(kāi)發(fā)環(huán)境安裝

rust官方文檔很詳盡,可以直接按照官方文檔執(zhí)行。安裝 Rust 的主要方式是通過(guò) Rustup 這一工具,它既是一個(gè) Rust 安裝器又是一個(gè)版本管理工具,可以使用下面一條命令完成安裝:

curl --proto '=https' --tlsv1.2 -sSf https://sh. | sh

完成后可以檢測(cè)一下rustup的版本:

?  ~ rustup -V
rustup 1.25.1 (2022-07-12)
The Rust toolchain installer

還有rustc的版本:

?  ~ rustc -V
rustc 1.62.1 (e092d0b6b 2022-07-16)

編寫下面的hello.rs程序:

?  rust cat hello.rs
fn main(){
    println!('hello, rust');
}

rust是編譯程序,所以我們需要先編譯再運(yùn)行:

# 編譯
?  rustc hello.rs
# 運(yùn)行
?  ./hello
hello, rust

一般情況下我們不會(huì)直接使用rustc,這樣比較難以處理依賴,而是使用 Cargo Rust 官方的構(gòu)建工具和包管理器。rustup默認(rèn)會(huì)按照cargo:

?  cargo -V
cargo 1.62.1 (a748cf5a3 2022-06-08)

使用 cargo new start_rust 創(chuàng)建一個(gè)名為start_rust的項(xiàng)目,或者直接在當(dāng)前目錄使用 cargo init, 項(xiàng)目目錄結(jié)構(gòu)如下:

?  start_rust git:(master) ? tree -L 2
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs

可以看到和go的mod不一樣,cargo會(huì)創(chuàng)建src目錄,源碼都在這個(gè)目錄下。

Cargo.toml 文件描述了項(xiàng)目的信息及依賴,大概如下:

[package]
name = 'start_rust'
version = '0.1.0'
authors = ['game404 <studyoo@foxmail.com>']
edition = '2018'

# See more keys and their definitions at https://doc./cargo/reference/manifest.html

[dependencies]
...

完成main.rs文件中的main函數(shù),然后運(yùn)行:

?  start_rust git:(master) ? cargo run
   Compiling start_rust v0.1.0 (/Users/yoo/rust/start_rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.73s
     Running `target/debug/start_rust`
Hello, world!

使用cargo非常方便,一個(gè)命令即完成編譯和運(yùn)行兩個(gè)動(dòng)作。

rust項(xiàng)目依賴

可以使用 cargo add 指令添加項(xiàng)目依賴:

# cargo add ferris-says
    Updating crates.io index
      Adding ferris-says v0.2.1 to dependencies.
             Features:
             - clippy

添加完成后,我們可以在 Cargo.toml 文件中看到下面的內(nèi)容:

...
[dependencies]
ferris-says = '0.2.1'
...

也可以直接修改這個(gè)toml文件,使用 cargo build 指令時(shí)候會(huì)自動(dòng)安裝。

修改 main.rs 文件內(nèi)容:

use ferris_says::say; // from the previous step
use std::io::{stdout, BufWriter};

fn main() {
    let stdout = stdout();
    let message = String::from('Hello fellow Rustaceans!');
    let width = message.chars().count();

    let mut writer = BufWriter::new(stdout.lock());
    say(message.as_bytes(), width, &mut writer).unwrap();
}

運(yùn)行項(xiàng)目:

# cargo run
    Updating crates.io index
  Downloaded smawk v0.3.1
  Downloaded smallvec v0.4.5
  Downloaded unicode-width v0.1.9
  Downloaded textwrap v0.13.4
  Downloaded ferris-says v0.2.1
  Downloaded 5 crates (97.7 KB) in 0.33s
   Compiling unicode-width v0.1.9
   Compiling smawk v0.3.1
   Compiling smallvec v0.4.5
   Compiling textwrap v0.13.4
   Compiling ferris-says v0.2.1
   Compiling rust v0.1.0 (/root/rust)
    Finished dev [unoptimized + debuginfo] target(s) in 2.34s
     Running `target/debug/rust`
 __________________________
< Hello fellow Rustaceans! >
 --------------------------
        \
         \
            _~^~^~_
        \) /  o o  \ (/
          '_   -   _'
          / '-----' \

可以看到rust的吉祥物,一只叫做ferris的螃蟹。

rust版本升級(jí)

當(dāng)前rust最新版本是1.63.0, 我們使用rustup將rust升級(jí)到最新版本。升級(jí)非常簡(jiǎn)單, 也只需要執(zhí)行一條命令:

rustup update

檢測(cè)一下升級(jí)結(jié)果:

?  rustup -V
rustup 1.25.1 (2022-07-12)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.63.0 (4b91a6ea7 2022-08-08)`
?  rustc -V
rustc 1.63.0 (4b91a6ea7 2022-08-08)
?  cargo -V
cargo 1.63.0 (fd9c4297c 2022-07-01)

今年各種事情導(dǎo)致斷更了比較久。拖更的原因很多,復(fù)更的原因卻只有一個(gè),“堅(jiān)持” 兩字而已。也歡迎大家回來(lái):)

參考鏈接

  • https://www./zh-CN/learn/get-started
  • https://github.com/pdm-project/pdm
  • https:///2020/02-28/pdm-introduction/
  • https://v/doc/install

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲少妇人妻一区二区| 办公室丝袜高跟秘书国产| 国产又粗又猛又黄又爽视频免费| 精品国自产拍天天青青草原| 少妇福利视频一区二区| 久久精品一区二区少妇| 微拍一区二区三区福利| 免费大片黄在线观看国语| 欧美日韩精品综合一区| 91蜜臀精品一区二区三区| 又黄又硬又爽又色的视频| 精品人妻一区二区三区免费| 日本办公室三级在线观看| 91欧美日韩国产在线观看| 日本加勒比不卡二三四区| 日韩精品人妻少妇一区二区| 老司机这里只有精品视频| 四十女人口红哪个色好看| 日本一二三区不卡免费| 精品少妇一区二区三区四区| 国产色偷丝袜麻豆亚洲| 亚洲人妻av中文字幕| 人妻巨大乳一二三区麻豆| 人妻熟女欲求不满一区二区| 久久精品色妇熟妇丰满人妻91| 日韩在线精品视频观看| 精品人妻av区波多野结依| 又黄又色又爽又免费的视频| 亚洲日本加勒比在线播放| 成人日韩视频中文字幕| 日韩欧美国产高清在线| 国产欧美日产中文一区| 欧美精品在线播放一区二区| 久久精品中文扫妇内射| 久久国产人妻一区二区免费| 日韩高清毛片免费观看| 国产日韩欧美在线播放| 国产高清在线不卡一区| 国产精品一区二区香蕉视频 | 激情五月综五月综合网| 日本三区不卡高清更新二区|