LoginSignup
14
13

Github上の他人のPythonリポジトリと開発環境を再現して実行してみた

Last updated at Posted at 2024-04-29

女性とひつじに関する伝聞録的なものを書いています(とても技術的ではない)。よろしければフォローしてね。

※いいねやストックが励みになっています。ありがとうございます。

サンプルはこれ。

雪櫻ブログ – 自作ソフト「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/
image.png

指定されてる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と自動的に紐づけできる。

image.png

VSCodeは管理者権限での起動か、書き込み権限を与えておく

拡張機能を導入する

ほかの記事で詳しいのでこれぐらいで。とりあえずこれだけでOK。

image.png

日本語化する

慣れたら英語でいいのだが、ストレスで発狂しそうになったので入れた

image.png

使い方は中で説明しているが、書いておく

1.VSCode上でCtrl+Shift+P を押して "コマンド パレット" を表示

2.「表示言語を構成する」から選ぶ

image.png

プロジェクト起動直後

Visual Studioと違って、いわゆる「プロジェクトファイル(.sln)」に相当するものがない。、

まっさらな状態ではModuleのimportでエラーが出まくっている。
image.png

これを一つ一つ手動で入れる....でもいいのだが、requirements.txtがリポジトリ内に用意されており、これを利用することで一括でインストールできる。これはわざわざ作者から聞いた。

適切なインタープリターを選択する

Visual Studioと違って単純にPip installで全てが終わるわけではなく、現在選択されているPythonコンパイラのバージョンごとにモジュールがインストールされるという特徴がある。

そのうえ、インタープリタとして指定されているPython環境変数にPathを通してあるもの(Windows上のPython) と一致させないといけない。単純にVersionが一致していればいいというわけではないのである。

これをしっかりやっておかないと、Pip installしてもVSCodeのインタープリタとして指定しているPyrhonはインストールされたモジュールを知らないことになる。

しかも、このPython Versionを指定する方法が謎だった。初心者が普通にやってたら詰むポイントだと思う。

インタープリターを指定する方法は以下(ほかにあったら教えてください)

Python.exeのフルパスを直接入力することも可能です。

1A.画面最下部のステータスバーの右側をクリック(赤枠)
image.png

1B.エラーメッセージから右クリック
image.png

2.インタープリタを選択
image.png

仮想環境を作成する

VSCodeには仮想環境を作成できる機能がある。依存関係で苦労したりするので使うといいです。

image.png

インタープリターにはPythonのVersionを指定します
image.png

依存関係としてrequirements.txtを使用します
image.png

実際のこのリポジトリではエラーが出るので、手動で打ち込みます。

環境変数を設定する

作成した仮想環境のPythonを環境変数として設定します。
仮想環境を利用する場合は、かなり面倒だけどやらないといけないです(笑)

G:\test\Yukis_Army_knife\.venv\Scripts\python.exe を指定します。

image.png

タスクバーから環境変数で検索して出せます。
image.png

以下のように設定します。
image.png

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  

普通にやってもうまくいかないため、requirements.txt内のVersion情報をサクラエディタで削除しました

image.png
方法は正規表現で ==.*を検索して置換

これでStep数の大部分を削減できました(累計2回やってこうだったので再現性が高い)。
多分、全部指定する必要はなかったのだと思われ。

アプリケーションを実行(デバッグする)

いよいよアプリ実行です。

管理者権限でVSCodeを開く

Gsudoも試したけど、VSCodeそのものに管理者権限か書き込み権限が必要らしい

ここまでたどり着くには
Terminalで認識するPythonと現在選択されているPython インタープリターが一致してないといけません。

エラーはすべて解決されています。
image.png

いつもの実行結果アニメーション

実証主義なんでこういうのはいつも用意してます。

bandicam 2024-04-29 12-10-27-510_Harua.mp4.gif

この件で使用したコマンド

Pythonがインストールされている場所を出力(VSCode上では出なかった)
where python
Pythonを終了する
Exit()
インストール
pip install module
アンインストール
pip uninstall module
テキストファイルからpipする
pip install -r setting/requirements.txt
インストールされているModuleを列挙
pip list
全てのPython moduleを削除するスクリプト
pip freeze | %{$_.split('==')[0]} | %{pip uninstall -y $_}

とにかくEnter Key 押しまくればYes扱いらしい

あまり面白くなかったと思われますが

読んでいただいてどうもです。
良かったらいいねボタン
悪かったらバッドボタンをお願いします。

間違いがあったらコメントか編集リクで。

14
13
3

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
14
13