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


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

https://twitter.com/sheephuman/status/1784171884453732729


 ※いいねやストックが励みになっています。ありがとうございます。
 
 サンプルはこれ。
 
[雪櫻ブログ – 自作ソフト「Yukis Army knife」の紹介](https://yukisakura001.github.io/YAK-Intro.html)

作者Twitter（"X"呼びはしてない）：https://twitter.com/yukisakura001

僕が作ってるのと比べて便利(笑)
 
 https://github.com/yukisakura001/Yukis_Army_knife

# 関連記事

https://qiita.com/taku8/items/a31f9bbdd321eb47381c

https://qiita.com/t20190127/items/ffc4747cb67afff686ee

https://qiita.com/nanato12/items/ddf26487eb30714251c3

https://qiita.com/SAITO_Keita/items/ddcde4fdcdf5e5eaa933



# 概要と動機

本記事ではリポジトリをローカルに保存し、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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/1ddc6630-2f2f-7499-5df8-8baef30a7e02.png)

指定されてるPythonモジュールの一覧
<details><summary>クリックで展開</summary>

```slim
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
```
</details>



# git Cloneする
※VSCodeは日本語化してあります。

エクスプローラからやってもいいのだが、今回は**VSCode内でGithubのリポジトリを複製する**
そうするとGithubと自動的に紐づけできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/6a56d5a2-fb31-aea7-e189-204d65c767cd.png)

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

# 拡張機能を導入する
ほかの記事で詳しいのでこれぐらいで。とりあえずこれだけでOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/c1cf1465-e8ca-eca2-9633-ec9e2ab5ff48.png)

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


 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/75041186-0b0c-7dda-a1a1-e3530b132c23.png)

使い方は中で説明しているが、書いておく
#### 1．VSCode上でCtrl+Shift+P を押して "コマンド パレット" を表示

#### 2.「表示言語を構成する」から選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/4ca2ec22-b11f-2541-c410-c481ddf33bfc.png)


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

まっさらな状態ではModuleのimportでエラーが出まくっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/f134ce07-c102-b95b-b8dd-05c32e8b587d.png)


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

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

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



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

```mermaid
graph TD;
    Windows上のPython<-->VSCodeのインタープリタとして指定されるPython
    
```


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

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

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

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

1A.画面最下部のステータスバーの右側をクリック（赤枠）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/3322672b-cc86-3fd9-ef52-0b40cc5f8c0a.png)

1B.エラーメッセージから右クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/27fecaa1-3268-6cc1-f57c-ddf26d9f9094.png)

2.インタープリタを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/be5b1956-b3cd-1a4b-209e-67bde2b69e15.png)


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/2f556072-9055-7fae-2779-8036e7eb85bc.png)

インタープリターにはPythonのVersionを指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/c8868500-94c0-53cb-60d2-755d1bc7981e.png)

依存関係としてrequirements.txtを使用します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/612f635f-c460-4b7b-0bb0-ba60ae203d9d.png)

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

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


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/72ba5c6d-b911-e58d-574e-1728a4718ebd.png)

タスクバーから```環境変数```で検索して出せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/4209fdff-2025-d5a8-b73d-c2aa04d2cd22.png)


以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/b557b181-14b0-9d00-9cfc-d9586c7730f1.png)


VSCodeを再起動すると反映されます。

# requirements.txtをTerminalでpip installする

```slim
pip install -r setting/requirements.txt
```




途中まではいけるが以下のエラーが発生する

```slim
  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  
```


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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/7c103acf-5045-5ac3-81b9-518775cd9af1.png)
方法は正規表現で　```==.*```を検索して置換
:::


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

# アプリケーションを実行（デバッグする）

いよいよアプリ実行です。
## 管理者権限でVSCodeを開く

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

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


エラーはすべて解決されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/f83c7684-d443-18a0-0003-5b9310d0ffe2.png)


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

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

![bandicam 2024-04-29 12-10-27-510_Harua.mp4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/c2065b97-a4d6-eedc-145e-a5b1b62edf4e.gif)



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

```powershell:Pythonがインストールされている場所を出力（VSCode上では出なかった）
where python
```
```powershell:Pythonを終了する
Exit()
```
```powershell:インストール
pip install module
```
```powershell:アンインストール
pip uninstall module
```


```powershell:テキストファイルからpipする
pip install -r setting/requirements.txt
```


```powershell:インストールされているModuleを列挙
pip list
```

```powershell:全てのPython moduleを削除するスクリプト
pip freeze | %{$_.split('==')[0]} | %{pip uninstall -y $_}
```
とにかくEnter Key 押しまくればYes扱いらしい



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

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

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