pipはつかえる
このあいだ、インターネット接続を制限された職場のネット環境でもpipを使う方法を見つけた、という記事を書いた。少し時間が開いてしまったけど、今日試してみた。結果は「pipはつかえる」だ。
検証のために、インストールしてあった Python をいったん削除(キャッシュやらなんやらも全部削除)して、インストールしなおした。まぁ、バージョンアップもかねて、ね。
username@workpc: Documents > python -V Python 3.9.7
この状態ではパッケージは2つしかインストールされてない。
username@workpc: Documents > pip list Package Version ---------- ------- pip 21.2.3 setuptools 57.4.0
で、PyPI.org にアクセスせずローカルなネットワークで完結するよう、pip の設定ファイル %APPDATA%\Roming\pip\pip.ini を書いておく。
[global] find-links = file://workpc/py-packages [install] find-links = file://workpc/py-packages no-index = yes [list] no-index = yes
このあいだの記事に書いたように、--find-links
オプションを指定する代わりにここに書いておく。ここでは file://workpc/py-packages
を指定している。no-index = yes
は PyPI.org を見に行かないようにする設定。これがないと繋がらない PyPI.org にアクセスしようとして時間を無駄にすることになる。
つぎは上の find-links
で指定した共有フォルダを作る。といっても自分の PC にテキトーなフォルダを作って py-packages
って名前で共有するだけだ。あとはあらかじめダウンロードしておいたパッケージファイルを放り込んでおく。
さて、これで準備は完了。試しに poetry をインストールしてみた。
username@workpc: Documents > pip install poetry Looking in links: file://workpc/py-packages Processing \\workpc\py-packages\poetry-1.1.11-py2.py3-none-any.whl Processing \\workpc\py-packages\html5lib-1.1-py2.py3-none-any.whl Processing \\workpc\py-packages\keyring-21.8.0-py3-none-any.whl Processing \\workpc\py-packages\shellingham-1.4.0-py2.py3-none-any.whl Processing \\workpc\py-packages\tomlkit-0.7.2-py2.py3-none-any.whl Processing \\workpc\py-packages\clikit-0.6.2-py2.py3-none-any.whl Processing \\workpc\py-packages\requests_toolbelt-0.9.1-py2.py3-none-any.whl Processing \\workpc\py-packages\cleo-0.8.1-py2.py3-none-any.whl Processing \\workpc\py-packages\poetry_core-1.0.7-py2.py3-none-any.whl Processing \\workpc\py-packages\cachy-0.3.0-py2.py3-none-any.whl Processing \\workpc\py-packages\requests-2.26.0-py2.py3-none-any.whl Processing \\workpc\py-packages\virtualenv-20.8.1-py2.py3-none-any.whl Processing \\workpc\py-packages\crashtest-0.3.1-py3-none-any.whl Processing \\workpc\py-packages\pexpect-4.8.0-py2.py3-none-any.whl Processing \\workpc\py-packages\cachecontrol-0.12.6-py2.py3-none-any.whl Processing \\workpc\py-packages\pkginfo-1.7.1-py2.py3-none-any.whl Processing \\workpc\py-packages\packaging-20.9-py2.py3-none-any.whl Processing \\workpc\py-packages\msgpack-1.0.2-cp39-cp39-win_amd64.whl Processing \\workpc\py-packages\lockfile-0.12.2-py2.py3-none-any.whl Processing \\workpc\py-packages\pylev-1.4.0-py2.py3-none-any.whl Processing \\workpc\py-packages\pastel-0.2.1-py2.py3-none-any.whl Processing \\workpc\py-packages\webencodings-0.5.1-py2.py3-none-any.whl Processing \\workpc\py-packages\six-1.16.0-py2.py3-none-any.whl Processing \\workpc\py-packages\pywin32_ctypes-0.2.0-py2.py3-none-any.whl Processing \\workpc\py-packages\pyparsing-2.4.7-py2.py3-none-any.whl Processing \\workpc\py-packages\ptyprocess-0.7.0-py2.py3-none-any.whl Processing \\workpc\py-packages\urllib3-1.26.7-py2.py3-none-any.whl Processing \\workpc\py-packages\idna-3.2-py3-none-any.whl Processing \\workpc\py-packages\charset_normalizer-2.0.6-py3-none-any.whl Processing \\workpc\py-packages\certifi-2021.5.30-py2.py3-none-any.whl Processing \\workpc\py-packages\filelock-3.3.0-py3-none-any.whl Processing \\workpc\py-packages\backports.entry_points_selectable-1.1.0-py2.py3-none-any.whl Processing \\workpc\py-packages\platformdirs-2.4.0-py3-none-any.whl Processing \\workpc\py-packages\distlib-0.3.3-py2.py3-none-any.whl Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests, pylev, pastel, msgpack, crashtest, webencodings, six, pywin32-ctypes, pyparsing, ptyprocess, platformdirs, lockfile, filelock, distlib, clikit, cachecontrol, backports.entry-points-selectable, virtualenv, tomlkit, shellingham, requests-toolbelt, poetry-core, pkginfo, pexpect, packaging, keyring, html5lib, cleo, cachy, poetry Successfully installed backports.entry-points-selectable-1.1.0 cachecontrol-0.12.6 cachy-0.3.0 certifi-2021.5.30 charset-normalizer-2.0.6 cleo-0.8.1 clikit-0.6.2 crashtest-0.3.1 distlib-0.3.3 filelock-3.3.0 html5lib-1.1 idna-3.2 keyring-21.8.0 lockfile-0.12.2 msgpack-1.0.2 packaging-20.9 pastel-0.2.1 pexpect-4.8.0 pkginfo-1.7.1 platformdirs-2.4.0 poetry-1.1.11 poetry-core-1.0.7 ptyprocess-0.7.0 pylev-1.4.0 pyparsing-2.4.7 pywin32-ctypes-0.2.0 requests-2.26.0 requests-toolbelt-0.9.1 shellingham-1.4.0 six-1.16.0 tomlkit-0.7.2 urllib3-1.26.7 virtualenv-20.8.1 webencodings-0.5.1
無事完了。ちゃんとインストールできてるのも確認できる。
username@workpc: Documents > pip list Package Version --------------------------------- --------- backports.entry-points-selectable 1.1.0 CacheControl 0.12.6 cachy 0.3.0 certifi 2021.5.30 charset-normalizer 2.0.6 cleo 0.8.1 clikit 0.6.2 crashtest 0.3.1 distlib 0.3.3 filelock 3.3.0 html5lib 1.1 idna 3.2 keyring 21.8.0 lockfile 0.12.2 msgpack 1.0.2 packaging 20.9 pastel 0.2.1 pexpect 4.8.0 pip 21.2.3 pkginfo 1.7.1 platformdirs 2.4.0 poetry 1.1.11 poetry-core 1.0.7 ptyprocess 0.7.0 pylev 1.4.0 pyparsing 2.4.7 pywin32-ctypes 0.2.0 requests 2.26.0 requests-toolbelt 0.9.1 setuptools 57.4.0 shellingham 1.4.0 six 1.16.0 tomlkit 0.7.2 urllib3 1.26.7 virtualenv 20.8.1 webencodings 0.5.1
というわけで、PyPI.org に繋がらない環境でも pip がつかえるのが確認できた。まぁわかってたけどね。
poetryはつかえない
つぎはインストールしたばかりの poetry を試してみた。
username@workpc: Documents > poetry config virtualenvs.in-project true username@workpc: Documents > poetry new py-sample Created package py_sample in py-sample
できたプロジェクトフォルダに入って、click を追加してみた。すると:
username@workpc: Documents > cd py-sample username@workpc: py-sample > poetry add click Creating virtualenv py-sample in C:\Users\username\Documents\py-sample\.venv ConnectionError HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /pypi/click/json (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000020637A223D0>: Failed to establish a new connection: [WinError 10060] 接続済みの呼び出し 先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。')) at ~\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\adapters.py:516 in send 512│ if isinstance(e.reason, _SSLError): 513│ # This branch is for urllib3 v1.22 and later. 514│ raise SSLError(e, request=request) 515│ → 516│ raise ConnectionError(e, request=request) 517│ 518│ except ClosedPoolError as e: 519│ raise ConnectionError(e, request=request) 520│
こんなエラーに。そうすんなりとは行ってくれないか。
ググってみると、Poetry の日本語ドキュメントのページを見つけた。これによると pyproject.toml ファイルを編集してプライベートなリポジトリを追加できるようなので、こんなふうに追記した。
[[tool.poetry.source]] name = "private" url = "file://workpc/py-packages/"
さっきの共有フォルダを見に行ってくれることを期待して書いたんだけど、結果は次の通り:
username@workpc: py-sample > poetry add click InvalidSchema No connection adapters were found for 'file://workpc/py-packages/click/' at ~\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py:742 in get_adapter 738│ if url.lower().startswith(prefix.lower()): 739│ return adapter 740│ 741│ # Nothing matches :-/ → 742│ raise InvalidSchema("No connection adapters were found for {!r}".format(url)) 743│ 744│ def close(self): 745│ """Closes all adapters and as such the session""" 746│ for v in self.adapters.values():
違うエラーを吐いた。どうやら PyPI.org の代わりに指定したプライベートなリポジトリを探しに行ってはくれてるようだけど、file:
スキーマをサポートしてないようだ。ドキュメントを見る限りでは、プライベートなリポジトリとはいっても PyPI.org 相当の機能が必要で、パッケージファイルが置いてあればいいというわけではないらしい。ということは pipiserver を立てるしかないのか。
残念な結果に終わった。