populus OSError: [Errno 2] Нет такого файла или каталога

При попытке:

$populus compile

Получить:

OSError: [Errno 2] No such file or directory

Пытался:

Пытался установить отсутствующие зависимости, как описано здесь, а также установил компилятор солидности - тот же результат. И тот же результат под sudo или virtualenv. populus init работает как положено.

Связанная проблема на GitHub.

Полный вывод консоли:

============ Compiling ==============
> Loading contracts from: /home/petr/Projects/populus-tests/contracts
Traceback (most recent call last):
  File "/usr/local/bin/populus", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/populus/cli/compile_cmd.py", line 46, in compile_contracts
    result = compile_and_write_contracts(project_dir, *filters, optimize=optimize)
  File "/usr/local/lib/python2.7/dist-packages/populus/compilation.py", line 161, in compile_and_write_contracts
    **compiler_kwargs
  File "/usr/local/lib/python2.7/dist-packages/populus/compilation.py", line 94, in compile_project_contracts
    **compiler_kwargs
  File "/usr/local/lib/python2.7/dist-packages/populus/compilation.py", line 81, in compile_source_file
    **compiler_kwargs
  File "/usr/local/lib/python2.7/dist-packages/populus/solidity.py", line 52, in solc
    stderr=subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Ответы (3)

После установки некоторых других инструментов (например, EthereumJS testrpc ) проблема решилась сама собой. Я предполагаю, что это был компилятор solc, который не был правильно установлен на моем компьютере.

Использовался для сборки компилятора Solidity из исходников, но затем устанавливался как пакет npm, что было намного проще.

Итак, если у вас такая же проблема. Попробуйте проверить, работает ли команда solc .

Просто была такая же проблема. Кроме solcтого, это также зависит от lllcкоманды.

Ошибка говорит о том, что у вас нет каталога:

/home/petr/Projects/populus-tests/contracts

Так ли это? Если да, создайте его и скопируйте в него исходные файлы контракта.

Нет, каталог есть. Он был создан командой populus init.

Из документации для populus init:

Запуск $ populus init инициализирует текущий каталог макетом проекта по умолчанию, который использует populus.

./contracts/
./contracts/Example.sol
./tests/test_examply.py ./html/index.html
./assets/

Обратите внимание, что он инициализирует текущий каталог, то есть из того места, где вы запускаете команду, а это означает, что populus compileона должна выполняться в том же каталоге и по умолчанию будет компилироваться ./contracts/Example.sol.

Да, это я проверил. Я использую правильное местоположение. Есть что-то другое.
Точно Example.solсуществует? И вы запускаете из того же каталога, initиз которого запускались?
Конечно. Пожалуйста, посмотрите самую первую ссылку в вопросе. Во второй строке говорится, что проблема может возникнуть, если компилятор solc не установлен. Но я его установил.