背景
Embeddable Python環境でline-bot-sdkライブラリを利用したかった.
しかし,pip install時に,依存するfutureライブラリのインストールでエラーが出た.
なお,本記事執筆時点でのfutureライブラリのバージョンは0.18.3である.
PS C:\Users\hoge\Downloads\python-3.11.2-embed-amd64> ./python -m pip install future
Collecting future
Using cached future-0.18.3.tar.gz (840 kB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [6 lines of output]
Traceback (most recent call last):
File "<string>", line 2, in <module>
File "<pip-setuptools-caller>", line 34, in <module>
File "C:\Users\hoge\AppData\Local\Temp\pip-install-ooax0jzt\future_4f17c5ec60354cc08d4df73197500084\setup.py", line 86, in <module>
import src.future
ModuleNotFoundError: No module named 'src'
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
できたこと
Embeddable Python環境に,futureライブラリ(と,line-bot-sdk)をインストールした.
やったこと
futureライブラリの「setup.py」ファイルに,「sys.path.append("")」と記載した行を追記する.
#!/usr/bin/env python
from __future__ import absolute_import, print_function
import os
import os.path
import sys
sys.path.append("") # ←この行を追記した.
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
具体的な手順
- PyPIより該当のインストーラをダウンロードする.
- 7-Zip等を利用して解凍する.
- 適当なテキストエディタでsetup.pyファイルを開き,上記一行を追記する.
- ZIPファイルに固め,当該ZIPファイルを指定してpip installする.
PS C:\Users\hoge\Downloads\python-3.11.2-embed-amd64> ./python -m pip install ./future-0.18.3.zip
Processing c:\users\hoge\downloads\python-3.11.2-embed-amd64\future-0.18.3.zip
Preparing metadata (setup.py) ... done
Building wheels for collected packages: future
Building wheel for future (setup.py) ... done
Created wheel for future: filename=future-0.18.3-py3-none-any.whl size=492053 sha256=46bd2748826e7eea027eef3bebffb5a3ee23ac940bacba86b85d728cf5895917
Stored in directory: c:\users\hoge\appdata\local\pip\cache\wheels\5f\f7\ed\dd1ed5930a7bed1e192e75511b90568f6f49717e6d5b24ad7b
Successfully built future
Installing collected packages: future
WARNING: The scripts futurize.exe and pasteurize.exe are installed in 'C:\Users\hoge\Downloads\python-3.11.2-embed-amd64\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed future-0.18.3
原因考察
「python.exe」の存在する場所にパスが通っていないのが直接的な原因か?
環境変数をあまりいじりたくないので,Embeddable Pythonをパスを通さずに利用していた.
(わざわざEmbeddable Pythonを使う人,そういう人多そう.)
(理解が間違っていたらコメント欄で教えてください.)
参考文献
-
https://teratail.com/questions/286390
「yamahubuki」さんの回答を参考にした.
そのまま実行するとaddメソッドがないと怒られたので,appendメソッドを使用した. -
https://qiita.com/mm_sys/items/1fd3a50a930dac3db299
上記teratailのページについていたコメントに記載されていた.
こちらはpthファイルに同じ内容を記載するようだ. -
https://qiita.com/rhene/items/529386ce9b7c86cfe401
これも同じくpthファイルに同じ内容を記載すれば良いとのことだった.