Skip to content

Instantly share code, notes, and snippets.

@junkor-1011
Created June 5, 2023 12:29
Show Gist options
  • Save junkor-1011/5522827ddba25dfd6bf82fa2ca1ff69a to your computer and use it in GitHub Desktop.
Save junkor-1011/5522827ddba25dfd6bf82fa2ca1ff69a to your computer and use it in GitHub Desktop.
LT資料: pep668 & pipx
<!DOCTYPE html>
<html>
<head>
<title>about pep668</title>
<meta charset="utf-8">
<style>
@page {
size: 1210px 681px;
margin: 0;
}
@media print {
.remark-slide-scaler {
width: 100% !important;
height: 100% !important;
transform: scale(1) !important;
top: 0 !important;
left: 0 !important;
}
}
body { font-family: sans-serif; }
h1, h2, h3 {
font-weight: normal;
}
.remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; }
</style>
</head>
<body>
<textarea id="source">
class: center, middle
# Title
---
# Agenda
1. Introduction
2. Deep-dive
3. ...
---
# Introduction
</textarea>
<script src="https://remarkjs.com/downloads/remark-latest.min.js">
</script>
<script>
var slideshow = remark.create({
sourceUrl: 'slides.md',
});
</script>
</body>
</html>

class: center, middle

PEP668について


TL;DR;

  • 開発時は絶対に何らかの意味での仮想環境を作成する
  • Pythonのツールをインストールするときにはpipxなどを使う
    • (pip install --userもNG)
    • (代替ツールとしてはryeなども良さそう?)

そもそもPEPとは?

  • 公式の説明: PEP 1 - PEP Purpose and Guidelines

  • "Python Enhancement Proposal"の略

  • 機能拡張のための提案とその議論のまとめ

    • コード規約など、より良い設計や運用につながる話も含まれている
    • (proposalなので、全部が採用されている訳ではない)
  • (雑にいうとRFCに似たような感じがある)

  • PEP8などのように世界的な標準となっているものもあり、公式コミュニティによる議論・意思決定みたいなところがあるので可能なものは準拠すると良い

    • (なお、PEP8もPEP257もstatusはacceptedでなくactiveだったりする)

PEP668

PEP 668 – Marking Python base environments as “externally managed”

  • 雑にまとめると、「仮想環境以外でpip installをするな」
  • 仮想環境外でのpip installはグローバルに影響が及んでしまう
    • yumdnf, aptなどのOS側のパッケージマネージャーで管理しているツールとコンフリクトしてしまう
    • (他にも色々な環境のPATHが汚されるので、開発上悪影響が出る可能性がある)

PEP668違反にならないために

プロジェクト単位で必要なパッケージ:

  • 開発時は仮想環境を作成してその中でインストールする
    • Python標準のvenvを使う
    • あるいは、内部的にvenvを使っているツール(poetrypipenv)を使う

グローバルに必要なパッケージ(CLIツールなど):

  • yumdnf, aptなどOSのパッケージマネージャーでインストールを行う
  • pipxなどを使う
    • 仮想環境内にpipでCLIツールをインストールし、$HOME/.local/binにシンボリックリンクを作成するツール

(参考) pip install --user

  • ユーザー単位でのインストール(U*ix系OSでは$HOME/.local以下にインストールされる)で、CLIツールのインストールなどで使われるケースが多かった
  • が、PEP668違反になるので、今後はpipxなどを使うと良さそう

(参考) Ubuntu23.04

  • デフォルト設定でPEP668を強制する設定になっている
    • 参考: 仮想環境外でpipを使うとエラーが出る

class: center, middle

End

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment