Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RuntimeError: Ninja is required to load C++ extension #167

Closed
lilingge opened this issue Jan 17, 2019 · 20 comments · Fixed by #305
Closed

RuntimeError: Ninja is required to load C++ extension #167

lilingge opened this issue Jan 17, 2019 · 20 comments · Fixed by #305

Comments

@lilingge
Copy link

Hi,author. I have followed the instructions on your page. I got your code by git clone, and run "python setup.py install" with no errors. However when I run "python3 demo.py", I got the error like this:

Traceback (most recent call last):
File "/home/llg/.local/lib/python3.5/site-packages/torch/utils/cpp_extension.py", line 873, in verify_ninja_availability
subprocess.check_call('ninja --version'.split(), stdout=devnull)
File "/usr/lib/python3.5/subprocess.py", line 576, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/lib/python3.5/subprocess.py", line 557, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.5/subprocess.py", line 947, in init
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'ninja'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "1.py", line 2, in
import encoding
File "/home/llg/Documents/PyTorch-Encoding/encoding/init.py", line 13, in
from . import nn, functions, parallel, utils, models, datasets, transforms
File "/home/llg/Documents/PyTorch-Encoding/encoding/nn/init.py", line 12, in
from .encoding import *
File "/home/llg/Documents/PyTorch-Encoding/encoding/nn/encoding.py", line 18, in
from ..functions import scaled_l2, aggregate, pairwise_cosine
File "/home/llg/Documents/PyTorch-Encoding/encoding/functions/init.py", line 2, in
from .encoding import *
File "/home/llg/Documents/PyTorch-Encoding/encoding/functions/encoding.py", line 14, in
from .. import lib
File "/home/llg/Documents/PyTorch-Encoding/encoding/lib/init.py", line 15, in
], build_directory=cpu_path, verbose=False)
File "/home/llg/.local/lib/python3.5/site-packages/torch/utils/cpp_extension.py", line 645, in load
is_python_module)
File "/home/llg/.local/lib/python3.5/site-packages/torch/utils/cpp_extension.py", line 814, in _jit_compile
with_cuda=with_cuda)
File "/home/llg/.local/lib/python3.5/site-packages/torch/utils/cpp_extension.py", line 837, in _write_ninja_file_and_build
verify_ninja_availability()
File "/home/llg/.local/lib/python3.5/site-packages/torch/utils/cpp_extension.py", line 875, in verify_ninja_availability
raise RuntimeError("Ninja is required to load C++ extensions")
RuntimeError: Ninja is required to load C++ extension

How to overcome it? What's the "Ninja"?

@zhanghang1989
Copy link
Owner

Please run following command:

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force 

solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB

@EmmaSRH
Copy link

EmmaSRH commented Mar 7, 2019

Hi,author. Does the solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB work? I tried it and it still doesn't work.

@lilingge
Copy link
Author

lilingge commented Mar 8, 2019

Hi,author. Does the solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB work? I tried it and it still doesn't work.

Hi, my problem was solved.However, the code still can't run. I tried many times, even ask an engineer of Dji for help. Finally, my personal opinion is that the stability of the code is poor. I hope you can run it successfully and let me know. Thanks

@nemonameless
Copy link

Please run following command:

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force 

solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB

How to do this without sudo Permission?

@SysOverdrive
Copy link

I seem to have the same problem

Traceback (most recent call last):
Traceback (most recent call last):
File "setup.py", line 26, in
'build_ext': BuildExtension
File "\lib\site-packages\setuptools_init_.py", line 144, in setup
return distutils.core.setup(**attrs)
File "\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "\lib\distutils\dist.py", line 966, in run_commands
self.run_command(cmd)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install.py", line 67, in run
self.do_egg_install()
File "\lib\site-packages\setuptools\command\install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 173, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 159, in call_command
self.run_command(cmdname)
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install_lib.py", line 11, in run
self.build()
File "\lib\distutils\command\install_lib.py", line 107, in build
self.run_command('build_ext')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\build_ext.py", line 87, in run
_build_ext.run(self)
File "\lib\distutils\command\build_ext.py", line 340, in run
self.build_extensions()
File "\lib\site-packages\torch\utils\cpp_extension.py", line 580, in build_extensions
build_ext.build_extensions(self)
File "\lib\distutils\command\build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "\lib\distutils\command\build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "\lib\site-packages\setuptools\command\build_ext.py", line 208, in build_extension
_build_ext.build_extension(self, ext)
File "\lib\distutils\command\build_ext.py", line 534, in build_extension
depends=ext.depends)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 562, in win_wrap_ninja_compile
with_cuda=with_cuda)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1140, in _write_ninja_file_and_compile_objects
error_prefix='Error compiling objects for extension')
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1413, in _run_ninja_build
raise RuntimeError(message)
RuntimeError: Error compiling objects for extension

How can I fix this on a windows machine ?

@houhaol
Copy link

houhaol commented Jun 1, 2020

Please run following command:

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force 

solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB

How to do this without sudo Permission?

Just curious. Have you found a method to overcome this sudo permission issue? thanks

@BooPatienze
Copy link

Please run following command:

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force 

solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB

How to do this without sudo Permission?

I just pip install ninja, and then no problem.

@woctezuma
Copy link

The simplest solution is sometimes overlooked. Thank you, BooPatienze!

@csyhy1986
Copy link

I seem to have the same problem

Traceback (most recent call last):
Traceback (most recent call last):
File "setup.py", line 26, in
'build_ext': BuildExtension
File "\lib\site-packages\setuptools__init__.py", line 144, in setup
return distutils.core.setup(**attrs)
File "\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "\lib\distutils\dist.py", line 966, in run_commands
self.run_command(cmd)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install.py", line 67, in run
self.do_egg_install()
File "\lib\site-packages\setuptools\command\install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 173, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 159, in call_command
self.run_command(cmdname)
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install_lib.py", line 11, in run
self.build()
File "\lib\distutils\command\install_lib.py", line 107, in build
self.run_command('build_ext')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\build_ext.py", line 87, in run
_build_ext.run(self)
File "\lib\distutils\command\build_ext.py", line 340, in run
self.build_extensions()
File "\lib\site-packages\torch\utils\cpp_extension.py", line 580, in build_extensions
build_ext.build_extensions(self)
File "\lib\distutils\command\build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "\lib\distutils\command\build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "\lib\site-packages\setuptools\command\build_ext.py", line 208, in build_extension
_build_ext.build_extension(self, ext)
File "\lib\distutils\command\build_ext.py", line 534, in build_extension
depends=ext.depends)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 562, in win_wrap_ninja_compile
with_cuda=with_cuda)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1140, in _write_ninja_file_and_compile_objects
error_prefix='Error compiling objects for extension')
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1413, in _run_ninja_build
raise RuntimeError(message)
RuntimeError: Error compiling objects for extension

How can I fix this on a windows machine ?

I also encounter with this problem on a windows platform, have you solved it bro?

@zhanghang1989
Copy link
Owner

For Windows, I would recommend using docker https://hangzhang.org/PyTorch-Encoding/notes/compile.html#using-docker

@cuge1995
Copy link

cuge1995 commented May 8, 2021

Please run following command:

wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force 

solution from https://www.claudiokuenzler.com/blog/756/install-newer-ninja-build-tools-ubuntu-14.04-trusty#.XEDUk89KjOB

It works for me.

@tommy-qichang
Copy link

I found the subprocess does not include the lib path of conda environments. So I manually set the environments in the script, and it works now.
eg.

my_env = os.environ.copy()
my_env["PATH"] = "/path/to.your/conda/.conda/envs/py3/bin:" + my_env["PATH"]
os.environ.update(my_env)

@nom57
Copy link

nom57 commented Sep 5, 2022

None of these solutions work for me on Windows

@RenzeLou
Copy link

I found the subprocess does not include the lib path of conda environments. So I manually set the environments in the script, and it works now. eg.

my_env = os.environ.copy()
my_env["PATH"] = "/path/to.your/conda/.conda/envs/py3/bin:" + my_env["PATH"]
os.environ.update(my_env)

Thanks. It works for me!

@liyiersan
Copy link

I seem to have the same problem
Traceback (most recent call last):
Traceback (most recent call last):
File "setup.py", line 26, in
'build_ext': BuildExtension
File "\lib\site-packages\setuptools__init__.py", line 144, in setup
return distutils.core.setup(**attrs)
File "\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "\lib\distutils\dist.py", line 966, in run_commands
self.run_command(cmd)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install.py", line 67, in run
self.do_egg_install()
File "\lib\site-packages\setuptools\command\install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 173, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "\lib\site-packages\setuptools\command\bdist_egg.py", line 159, in call_command
self.run_command(cmdname)
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\install_lib.py", line 11, in run
self.build()
File "\lib\distutils\command\install_lib.py", line 107, in build
self.run_command('build_ext')
File "\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "\lib\distutils\dist.py", line 985, in run_command
cmd_obj.run()
File "\lib\site-packages\setuptools\command\build_ext.py", line 87, in run
_build_ext.run(self)
File "\lib\distutils\command\build_ext.py", line 340, in run
self.build_extensions()
File "\lib\site-packages\torch\utils\cpp_extension.py", line 580, in build_extensions
build_ext.build_extensions(self)
File "\lib\distutils\command\build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "\lib\distutils\command\build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "\lib\site-packages\setuptools\command\build_ext.py", line 208, in build_extension
_build_ext.build_extension(self, ext)
File "\lib\distutils\command\build_ext.py", line 534, in build_extension
depends=ext.depends)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 562, in win_wrap_ninja_compile
with_cuda=with_cuda)
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1140, in _write_ninja_file_and_compile_objects
error_prefix='Error compiling objects for extension')
File "\lib\site-packages\torch\utils\cpp_extension.py", line 1413, in _run_ninja_build
raise RuntimeError(message)
RuntimeError: Error compiling objects for extension
How can I fix this on a windows machine ?

I also encounter with this problem on a windows platform, have you solved it bro?
Same problem on windows, did you solve it?

@zhanghang1989
Copy link
Owner

Please use the docker solution if you ran into any troubles especially on windows https://hangzhang.org/PyTorch-Encoding/notes/compile.html#using-docker

@adityamwagh
Copy link

@nom57 A bit off topic, but you might want to use Windows Subsystem for Linux if you are on Windows. It greatly simplifies working with a machine learning workload on Windows.

I use it regularly on Windows 11. It's essentially a virtual machine, although with near native performance.

@AndyJZhao
Copy link

I found the subprocess does not include the lib path of conda environments. So I manually set the environments in the script, and it works now. eg.

my_env = os.environ.copy()
my_env["PATH"] = "/path/to.your/conda/.conda/envs/py3/bin:" + my_env["PATH"]
os.environ.update(my_env)

Just a few comments on the great answer of tommy-qichang which solves my problem immediately.

  1. The code could be a little bit simpler, as below:
conda_path = "/path/to/your/conda/envs/py3/bin"
os.environ['PATH'] = f'{conda_path}:{os.environ["PATH"]}'
  1. The code should be placed BEFORE GPU related packages are imported. In other words, there shouldn't be any torch/tensorflow/transformers packages before you've set the environment variables correctly.

@Ren-Ma
Copy link

Ren-Ma commented May 10, 2023

This solution is the real answer to this question! Thank you @tommy-qichang @AndyJZhao

I found the subprocess does not include the lib path of conda environments. So I manually set the environments in the script, and it works now. eg.

my_env = os.environ.copy()
my_env["PATH"] = "/path/to.your/conda/.conda/envs/py3/bin:" + my_env["PATH"]
os.environ.update(my_env)

Just a few comments on the great answer of tommy-qichang which solves my problem immediately.

  1. The code could be a little bit simpler, as below:
conda_path = "/path/to/your/conda/envs/py3/bin"
os.environ['PATH'] = f'{conda_path}:{os.environ["PATH"]}'
  1. The code should be placed BEFORE GPU related packages are imported. In other words, there shouldn't be any torch/tensorflow/transformers packages before you've set the environment variables correctly.

@fengchuanpeng
Copy link

my_env = os.environ.copy()
my_env["PATH"] = "/path/to.your/conda/.conda/envs/py3/bin:" + my_env["PATH"]
os.environ.update(my_env)
@Ren-Ma Hello, which folder should these codes be placed in?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.