0
0

python埋め込み版でMINGWを使ってCythonを使いたい

Last updated at Posted at 2024-05-23

環境

current/
 ├ mingw64/
│ └ bin/
 └ python/
   ├ Lib/
   ├ Scripts/
   │ └ site-packages/
   │ └ setuptools/
   │ └ _distutils/
   └ get-pip.py

動機

埋め込み版python3.10.8でcythonを使うのに手間取ったのでメモ書き程度に記す。
埋め込み版を使わないのであれば必要ない話である
埋め込み版を使わなきゃいい話である
currentを作業ディレクトリとする

困ったこと

1. includeファイルがない

解決法

同バージョンの普通の python をダウンロードしてから include ディレクトリをcurrent\python\下にコピペする

ここで埋め込み版を使うのをあきらめればすべて解決する

異なるバージョンからコピペしてはいけない
cythonize した関数の実行時に不自然なエラーが出続けたりする

2. ディレクトリがない

上記のリンクを見たがdistutilsディレクトリは埋め込み版にはないのだ

解決法

current\python\Lib\distutils ではなく current\python\Lib\site-packages\setuptools\_distutils\ のディレクトリ下にdistutils.cfgを作成して以下のように書き込む :

distutils.cfg
[build]
compiler=mingw32

[build_ext]
compiler=mingw32

埋め込み版を使うメリット

pyhonのディレクトリを移動した後にget-pip.pyを実行し複雑なパスを設定しなおせば問題なく使えるため移植しやすい。以下は移植後の設定用バッチファイルであるcurrent//下において権限付きで実行する:

transplantation.bat
cd %~dp0
@echo "%cd% is equivalent to your curreent directory? If not,terminate it immediately"
@pause
SETX /M PATH "%PATH%;%cd%\mingw64\bin;%cd%\python\Scripts;%cd%\python"
.\python\python.exe .\python\get-pip.py

PATHが登録されてない!
cmdのPATHはcmdを開く前に決まってる。
だから新しく開きなおしたcmdではちゃんと変更されているはずである。

%PATH%;を絶対に忘れるな!
setxは上書きするコマンドなので使い方によってはパスがすべて消えたりするので扱いには注意。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0