女性とひつじに関する伝聞録的なものを書いています(とても技術的ではない)。よろしければフォローしてね。
※いいねやストックが励みになっています。ありがとうございます。
サンプルはこれ。
雪櫻ブログ – 自作ソフト「Yukis Army knife」の紹介
作者Twitter("X"呼びはしてない):https://twitter.com/yukisakura001
僕が作ってるのと比べて便利(笑)
関連記事
概要と動機
本記事ではリポジトリをローカルに保存し、VSCode上で実行するまでを行っています。
Codeの査読はいい経験になると思ったので。作者に何で書いてるのかと聞いたらVSCodeとのこと。 C#だけだと限界もあるのでやってみた。
Pythonにおいて、自分が他人のプロジェクトをVSCodeで再現する場合はかなり面倒くさい。
ある程度のお膳立てはしないと人が見てくれないという実例に思われる。
非常に苦労させられたと告白しておく。
作者曰く、ほかの方はもっと上手くやっているそうです。最初はみんなそうだよね。
環境
Windows11
Visual Studio Code (VSCode) バージョン: 1.88.1 (user setup)
VSCodeの日付: 2024-04-10T17:41:02.734Z
リポジトリで使用しているPython Versionとフレームワーク
Python 3.9.13(最新のPythonではpycryptodomeが動かない)
https://www.python.org/downloads/
指定されてるPythonモジュールの一覧
クリックで展開
altgraph
anyio
beautifulsoup4
Brotli
certifi
cffi
chardet
charset-normalizer
click
colorama
coloredlogs
copier
cryptography
csscompressor
datauri
decorator
Deprecated
deprecation
diff-match-patch
dunamai
et-xmlfile
exceptiongroup
feedparser
flatbuffers
funcy
googletrans
gTTS
h11
h2
hpack
hstspreload
htmlmin
httpcore
httpx
humanfriendly
hyperframe
idna
imageio
imageio-ffmpeg
importlib-metadata
iniconfig
install
jaconv
jeraconv
Jinja2
jinja2-ansible-filters
jsmin
keyboard
lxml
magika
Markdown
MarkupSafe
mdx-truly-sane-lists
mistune
MouseInfo
moviepy
mpmath
mutagen
numpy
oauthlib
onnxruntime
opencv-python
openpyxl
ordered-set
packaging
pathspec
pefile
Pillow
pillow-heif
pip-licenses
playsound
pluggy
plumbum
prettytable
proglog
prompt-toolkit
protobuf
psutil
PyAutoGUI
pycparser
pycryptodome
pycryptodomex
pydantic
PyGetWindow
Pygments
pyinstaller
pyinstaller-hooks-contrib
pykakasi
PyMsgBox
pynput
pyotp
pypdf
pyperclip
pypng
pyreadline3
PyRect
PyScreeze
pystray
pytesseract
pytest
python-dotenv
pytweening
pywin32
pywin32-ctypes
PyYAML
pyyaml-include
pyzipper
qrcode
questionary
randomuser
repath
requests
rfc3986
sgmllib3k
six
sniffio
soupsieve
SpeechRecognition
speedtest-cli
sv-ttk
svgwrite
sympy
tabulate
tkinterdnd2
tkinterweb
tomli
tqdm
ttkthemes
typing_extensions
urllib3
watchdog
wcwidth
websocket-client
websockets
win32-setctime
winotify
wrapt
youtube-transcript-api
yt-dlp
zipp
git Cloneする
※VSCodeは日本語化してあります。
エクスプローラからやってもいいのだが、今回はVSCode内でGithubのリポジトリを複製する
そうするとGithubと自動的に紐づけできる。
VSCodeは管理者権限での起動か、書き込み権限を与えておく
拡張機能を導入する
ほかの記事で詳しいのでこれぐらいで。とりあえずこれだけでOK。
日本語化する
慣れたら英語でいいのだが、ストレスで発狂しそうになったので入れた
使い方は中で説明しているが、書いておく
1.VSCode上でCtrl+Shift+P を押して "コマンド パレット" を表示
2.「表示言語を構成する」から選ぶ
プロジェクト起動直後
Visual Studioと違って、いわゆる「プロジェクトファイル(.sln)」に相当するものがない。、
まっさらな状態ではModuleのimportでエラーが出まくっている。
これを一つ一つ手動で入れる....でもいいのだが、requirements.txtがリポジトリ内に用意されており、これを利用することで一括でインストールできる。これはわざわざ作者から聞いた。
適切なインタープリターを選択する
Visual Studioと違って単純にPip installで全てが終わるわけではなく、現在選択されているPythonコンパイラのバージョンごとにモジュールがインストールされるという特徴がある。
そのうえ、インタープリタとして指定されているPythonは 環境変数にPathを通してあるもの(Windows上のPython) と一致させないといけない。単純にVersionが一致していればいいというわけではないのである。
これをしっかりやっておかないと、Pip installしてもVSCodeのインタープリタとして指定しているPyrhonはインストールされたモジュールを知らないことになる。
しかも、このPython Versionを指定する方法が謎だった。初心者が普通にやってたら詰むポイントだと思う。
インタープリターを指定する方法は以下(ほかにあったら教えてください)
Python.exeのフルパスを直接入力することも可能です。
環境変数を設定する
作成した仮想環境のPythonを環境変数として設定します。
仮想環境を利用する場合は、かなり面倒だけどやらないといけないです(笑)
G:\test\Yukis_Army_knife\.venv\Scripts\python.exe
を指定します。
VSCodeを再起動すると反映されます。
requirements.txtをTerminalでpip installする
pip install -r setting/requirements.txt
途中まではいけるが以下のエラーが発生する
Using cached yt_dlp-2024.3.10-py3-none-any.whl.metadata (164 kB)
Collecting zipp==3.15.0 (from -r setting/requirements.txt (line 140))
Using cached zipp-3.15.0-py3-none-any.whl.metadata (3.7 kB)
INFO: pip is looking at multiple versions of copier to determine which version is compatible with other requirements. This could take a while.
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit
https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
これでStep数の大部分を削減できました(累計2回やってこうだったので再現性が高い)。
多分、全部指定する必要はなかったのだと思われ。
アプリケーションを実行(デバッグする)
いよいよアプリ実行です。
管理者権限でVSCodeを開く
Gsudoも試したけど、VSCodeそのものに管理者権限か書き込み権限が必要らしい
ここまでたどり着くには
Terminalで認識するPythonと現在選択されているPython インタープリターが一致してないといけません。
いつもの実行結果アニメーション
実証主義なんでこういうのはいつも用意してます。
この件で使用したコマンド
where python
Exit()
pip install module
pip uninstall module
pip install -r setting/requirements.txt
pip list
pip freeze | %{$_.split('==')[0]} | %{pip uninstall -y $_}
とにかくEnter Key 押しまくればYes扱いらしい
あまり面白くなかったと思われますが
読んでいただいてどうもです。
良かったらいいねボタン
悪かったらバッドボタンをお願いします。
間違いがあったらコメントか編集リクで。