kb

Python設定

Pythonの環境設定。

環境変数

PYTHONUTF8
Pythonがファイル読み込みや標準入出力で使用するデフォルトの文字コードをUTF-8にするための変数。
システムのプロパティ > 環境変数 > ユーザー環境変数 > 新規 をクリックし、以下の値で作成する。
変数名
PYTHONUTF8 1

ターミナル

PowerShellを使用。

実行ポリシーの設定

スクリプト(.ps1)を実行できるように管理者権限でPowerShellを起動して実行ポリシーを設定しておく。
about_Execution_Policies - PowerShell | Microsoft Learn

現在の状態を表示
Get-ExecutionPolicy -List
実行可能に設定
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Set-ExecutionPolicy-RemoteSigned.bat
@echo off
echo 実行ポリシーを「RemoteSigned」に設定しています(CurrentUser スコープ)...
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force"
echo 設定が完了しました。
pause
元に戻す
Set-ExecutionPolicy Undefined -Scope CurrentUser
Set-ExecutionPolicy-Undefined.bat
@echo off
echo 実行ポリシーを「未定義(Undefined)」に戻しています(CurrentUser スコープ)...
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Set-ExecutionPolicy Undefined -Scope CurrentUser -Force"
echo 元に戻しました。
pause

仮想環境の構築

venvを使用。

作成

cd my_project
python -m venv .venv

以下、my_projectを現在のディレクトリとして進める。

有効化

. ./.venv/Scripts/Activate.ps1

インタプリタの確認

Get-Command python | Select-Object -ExpandProperty Source
グローバル環境の場合
C:\Users\<UserName>\AppData\Local\Programs\Python\Python311\python.exe
仮想環境の場合(実際は絶対パス)
my_project\.venv\Scripts\python.exe

無効化

deactivateコマンドが動作しなかったので、以下のスクリプトで対応。

deactivate-venv.ps1
<#
.SYNOPSIS
    VSCode や PowerShell 上で仮想環境 (.venv) を明示的に解除するスクリプト。

.DESCRIPTION
    - $env:VIRTUAL_ENV を解除し、仮想環境の Scripts パスを PATH から除去する。
    - VSCode ターミナルが仮想環境を自動再適用することは防がない(VSCode 側で対応)。
    - PowerShell 専用。bash には未対応。
#>

Write-Host ">>> 仮想環境の解除処理を開始します..."

# 環境変数 VIRTUAL_ENV の存在チェック
$venvPath = $env:VIRTUAL_ENV

if (-not $venvPath) {
    Write-Warning "仮想環境は現在アクティブではありません。(VIRTUAL_ENV が未設定)"
    return
}

# パスの標準化(バックスラッシュに統一)
$venvScripts = Join-Path $venvPath "Scripts"

# PATH から仮想環境の Scripts パスを除去(空要素も除去)
$originalPath = $env:PATH
$pathEntries = $originalPath -split ';' | Where-Object { $_.Trim() -ne '' }
$updatedEntries = $pathEntries | Where-Object {
    $normalizedEntry = $_.TrimEnd('\')
    $normalizedVenvScripts = $venvScripts.TrimEnd('\')
    $normalizedEntry -ne $normalizedVenvScripts
}
$updatedPath = $updatedEntries -join ';'
$env:PATH = $updatedPath

# 環境変数 VIRTUAL_ENV の削除
Remove-Item Env:VIRTUAL_ENV -ErrorAction SilentlyContinue

# プロンプトをリセット
if (Get-Command prompt -ErrorAction SilentlyContinue) {
    function global:prompt {
        "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
    }
}

Write-Host ">>> 仮想環境 [$venvPath] を無効化しました。"

# 成功確認
if (-not $env:VIRTUAL_ENV -and $env:PATH -notlike "*$venvScripts*") {
    Write-Host "仮想環境の無効化が完了しました。" -ForegroundColor Green
} else {
    Write-Warning "仮想環境の無効化が完全ではない可能性があります。"
}

Write-Host ">>> 現在の Python 実行ファイル:"
try {
    $pythonPath = Get-Command python -ErrorAction Stop | Select-Object -ExpandProperty Source
    Write-Host "    $pythonPath"
} catch {
    Write-Warning "Python が見つかりません。システムの PATH を確認してください。"
}
実行
. ./deactivate-venv.ps1

ターミナルの仮想環境を無効化してもPythonファイルのタブを選択すると仮想環境のままになっていたりするが、これはVSCodeの仮想環境の仕組みによるもの。

python-select-interpreter

仮想環境の管理を参照。

mayapy

MayaのPythonインタプリタ。
Mayaセッション外でMayaのPythonモジュールを使用するために必要。
ユーザー環境変数Pathmayapyのパスを追加しておく。

Maya 2022の場合
C:\Program Files\Autodesk\Maya2022\bin

使い方

スクリプト(.py)を実行
mayapy example.py

または

mayapy -m example

-mはモジュールとして実行するためのオプション。

Maya Pythonモジュールの使用方法

# 初期化
try:
    import maya.standalone
    maya.standalone.initialize()
except RuntimeError:
    pass

# ここに処理を記述
import maya.cmds as cmds
print(f"selection:{cmds.ls(selection=True)}")

# 初期化解除
try:
    import maya.standalone
    maya.standalone.uninitialize()
except Exception:
    pass

テスト

pytestを使用。

インストール
仮想環境
pip install pytest
mayapy
mayapy -m pip install pytest
確認方法
pip show pytest

Pythonのバージョンによって異なるバージョンがインストールされる点に注意。

使用方法
ファイル
pytest -v tests/example.py
ディレクトリ
pytest -v tests

コード補完

maya-stubsを使用。

インストール
VSCodeの問題なので仮想環境のみでよい。
pip install maya-stubs
確認方法
pip show maya-stubs
設定
ワークスペースで設定。

Visual Studio Code

拡張

ユーザー設定

Pylance
型チェックのレベル
{
  "python.analysis.typeCheckingMode": "standard"
}

ワークスペース設定

*.code-workspace
ワークスペース本体の設定
{
  "folders": [
    {
      "name": "Maya/dev",
      "path": "..\\Maya\\dev"
    },
    {
      "name": "Maya2022/scripts",
      "path": "C:\\Program Files\\Autodesk\\Maya2022\\scripts"
    },
    {
      "name": "Python/dev",
      "path": "..\\Python\\dev"
    }
  ],
  "settings": {
    "python.terminal.activateEnvInCurrentTerminal": true,
    "python.terminal.activateEnvironment": true,
    "terminal.integrated.cwd": "${workspaceFolder:Maya/dev}",
    "terminal.integrated.persistentSessionReviveProcess": "never",
    "terminal.integrated.profiles.windows": {
      "Maya venv": {
        "path": "powershell.exe",
        "args": [
          "-NoExit", "-Command",
          "$p=(code --locate-shell-integration-path pwsh 2>$null | Select-Object -Last 1); if($p -and (Test-Path $p)){. $p}; Set-Location '${workspaceFolder:Maya/dev}'; & '${workspaceFolder:Maya/dev}\\.venv\\Scripts\\Activate.ps1'"
        ],
        "env": {
          "PATH": "${workspaceFolder:Maya/dev}\\.venv\\Scripts;${env:LOCALAPPDATA}\\Programs\\Microsoft VS Code\\bin;${env:PATH}"
        },
        "overrideName": true
      },
      "Python venv": {
        "path": "powershell.exe",
        "args": [
          "-NoExit", "-Command",
          "$p=(code --locate-shell-integration-path pwsh 2>$null | Select-Object -Last 1); if($p -and (Test-Path $p)){. $p}; Set-Location '${workspaceFolder:Python/dev}'; & '${workspaceFolder:Python/dev}\\.venv\\Scripts\\Activate.ps1'"
        ],
        "env": {
          "PATH": "${workspaceFolder:Python/dev}\\.venv\\Scripts;${env:LOCALAPPDATA}\\Programs\\Microsoft VS Code\\bin;${env:PATH}"
        },
        "overrideName": true
      }
    }
  }
}
Maya/dev/.vscode/settings.json
Maya用の仮想環境を作成したディレクトリの設定
{
  "files.readonlyInclude": {
    "C:\\Program Files\\Autodesk\\Maya2022\\scripts\\**\\*": true
  },
  "python.analysis.extraPaths": [
    "C:\\Program Files\\Autodesk\\Maya2022\\Python37\\Lib\\site-packages",
    "${workspaceFolder}\\.venv\\Lib\\site-packages"
  ],
  "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe",
}

python.analysis.extraPathsへの\\.venv\\Lib\\site-packagesの指定は不要らしいが、手元の環境では指定しないとコード補完が利かなかったので指定している。

Python/dev/.vscode/settings.json
通常のPython用の仮想環境を作成したディレクトリの設定
{
  "python.defaultInterpreterPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe"
}
  • パス形式
    ${workspaceFolder:foo/bar}がVSCode内部で展開される際の形式に合わせてWindows形式で記述する。

  • 型チェック/コード補完
    Pylanceをインストール済みの場合は、python.analysis.extraPathsのみでよい。
    python.autoComplete.extraPathsは古いPython言語サーバー用なので不要。

仮想環境の管理

VSCode本体とVSCode内ターミナルの仮想環境はそれぞれ独立して管理されている。

VSCode本体(Python拡張機能)
用途
コードの入力支援、リンティング、デバッグ、Pythonファイル実行
設定方法
Python: Select Interpreterコマンド、またはpython.defaultInterpreterPath
VSCode内ターミナル
用途
手動でのコマンド実行、pip install、スクリプト実行など
設定方法
環境変数(PATH)、アクティベーションスクリプト、terminal.integrated.env.windowsによるPATH制御、またはterminal.integrated.profiles.windowsによるディレクトリ別設定

重要なポイント

  • VSCode本体が仮想環境Aを使用していても、ターミナルは仮想環境Bを使用することが可能。

  • それぞれ別々に設定する必要がある。

Pythonファイル実行時の動作
実行方法 動作
VSCodeのPython実行ボタン(右上角の三角形のボタン) VSCode本体の設定を使用
ターミナルでpython script.py ターミナルの環境を使用