Python/Pipenvでインストールしようとした時に出るAssertionErrorやFileNotFoundErrorの直し方
PipenvでPythonのパッケージをインストールしようとしたら、以下のようなやたら長いエラーが出てしまいました。
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
✘ Locking Failed!
Traceback (most recent call last):
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 807, in <module>
main()
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 802, in main
_main(parsed.pre, parsed.clear, parsed.verbose, parsed.system, parsed.write,
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 785, in _main
resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 746, in resolve_packages
results, resolver = resolve(
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 728, in resolve
return resolve_deps(
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 1378, in resolve_deps
results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 1093, in actually_resolve_deps
resolver.resolve()
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 808, in resolve
results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 796, in resolver
self.get_resolver(clear=self.clear, pre=self.pre)
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 787, in get_resolver
constraints=self.parsed_constraints, repository=self.repository,
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 780, in parsed_constraints
self._parsed_constraints = [c for c in self.constraints]
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 772, in constraints
self.constraint_file, finder=self.repository.finder, session=self.session,
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 762, in repository
self.pip_args, use_json=False, session=self.session,
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/utils.py", line 750, in session
self._session = self.pip_command._build_session(self.pip_options)
File "/home/macrat/.local/lib/python3.7/site-packages/pipenv/patched/notpip/_internal/cli/req_command.py", line 83, in _build_session
assert not options.cache_dir or os.path.isabs(options.cache_dir)
AssertionError
長い。すごく長い。
エラーの最後を見てみると、assert not options.cache_dir or os.path.isabs(options.cache_dir)
というアサーションに失敗しているらしいことが分かります。
どうもキャッシュの場所がちゃんと設定されていないっぽい?
色々試していたところ、以下のようなパターンのエラーも出ました。
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Building requirements...
✘ Locking Failed!
Traceback (most recent call last):
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 807, in <module>
main()
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 802, in main
_main(parsed.pre, parsed.clear, parsed.verbose, parsed.system, parsed.write,
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 785, in _main
resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages)
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 746, in resolve_packages
results, resolver = resolve(
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/resolver.py", line 728, in resolve
return resolve_deps(
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/utils.py", line 1378, in resolve_deps
results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/utils.py", line 1093, in actually_resolve_deps
resolver.resolve()
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/utils.py", line 808, in resolve
results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/utils.py", line 796, in resolver
self.get_resolver(clear=self.clear, pre=self.pre)
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/utils.py", line 788, in get_resolver
cache=DependencyCache(environments.PIPENV_CACHE_DIR), clear_caches=clear,
File "/home/ena/.local/lib/python3.7/site-packages/pipenv/patched/piptools/cache.py", line 66, in __init__
os.makedirs(cache_dir)
File "/usr/lib/python3.8/os.py", line 223, in makedirs
mkdir(name, mode)
FileNotFoundError: [Errno 2] そのようなファイルやディレクトリはありません: ''
どちらにしても、キャッシュのディレクトリがおかしいというのが問題のようです。
というわけで、PIPENV_CACHE_DIR
という環境変数を使ってキャッシュの場所を明示してみたら直りました。
以下のような設定を~/.bashrc
あたりに入れておくと良さそうです。
export PIPENV_CACHE_DIR=/var/tmp/pipenv-cache
保存先は環境に合せて設定してください。(こだわりが無ければこれでも良いはず)
参考: Advanced Usage of Pipenv — pipenv 2020.6.2.dev0 documentation / ☤ Changing Pipenv’s Cache Location