-
Notifications
You must be signed in to change notification settings - Fork 156
Open
Labels
enhancementNew feature or requestNew feature or request
Description
When I try to install torch-sparse
using Poetry, I'm getting the following error which occurs in setup.py
:
ModuleNotFoundError: No module named 'torch'
The reason is that torch-sparse
imports torch
in setup.py
while torch
is not yet installed. Since those torch
imports are only needed to build compiled extensions, it should be possible to avoid importing torch
when installing the torch-sparse
wheel package.
These are commands to reproduce the problem (tested using Poetry v1.1.7):
$ poetry init -n --python '^3.6.2' --dependency torch --dependency torch-sparse
$ poetry install
Creating virtualenv torch-sparse-poetry in /tmp/torch-sparse-poetry/.venv
Updating dependencies
Resolving dependencies... (77.1s)
Writing lock file
Package operations: 6 installs, 0 updates, 0 removals
• Installing numpy (1.19.5)
• Installing dataclasses (0.8)
• Installing scipy (1.5.4)
• Installing typing-extensions (3.10.0.0)
• Installing torch (1.9.0)
• Installing torch-sparse (0.6.11): Failed
EnvCommandError
Command ['/tmp/torch-sparse-poetry/.venv/bin/pip', 'install', '--no-deps', '$HOME/.cache/pypoetry/artifacts/59/cf/7b/23094d3d3aa79d571458529d8031882ce27d36db73083987acdab34868/torch_sparse-0.6.11.tar.gz'] errored with the following return code 1, and output:
Processing $HOME/.cache/pypoetry/artifacts/59/cf/7b/23094d3d3aa79d571458529d8031882ce27d36db73083987acdab34868/torch_sparse-0.6.11.tar.gz
ERROR: Command errored out with exit status 1:
command: /tmp/torch-sparse-poetry/.venv/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-vk1oqsni/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-vk1oqsni/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-2tsa72d0
cwd: /tmp/pip-req-build-vk1oqsni/
Complete output (5 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-req-build-vk1oqsni/setup.py", line 8, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
----------------------------------------
WARNING: Discarding file://$HOME/.cache/pypoetry/artifacts/59/cf/7b/23094d3d3aa79d571458529d8031882ce27d36db73083987acdab34868/torch_sparse-0.6.11.tar.gz. Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
WARNING: You are using pip version 21.1.3; however, version 21.2.2 is available.
You should consider upgrading via the '/tmp/torch-sparse-poetry/.venv/bin/python -m pip install --upgrade pip' command.
at ~/.local/share/pypoetry/venv/lib/python3.6/site-packages/poetry/utils/env.py:1101 in _run
1097│ output = subprocess.check_output(
1098│ cmd, stderr=subprocess.STDOUT, **kwargs
1099│ )
1100│ except CalledProcessError as e:
→ 1101│ raise EnvCommandError(e, input=input_)
1102│
1103│ return decode(output)
1104│
1105│ def execute(self, bin, *args, **kwargs):
ice1x, ibiscp, sbyebss, gauenk, Vezzp and 14 more
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Projects
Milestone
Relationships
Development
Select code repository
Activity
rusty1s commentedon Aug 5, 2021
This is a current limitation, indeed. The bad thing is that I do not think there exists a workaround for this. Any ideas?
sisp commentedon Aug 5, 2021
I would need to verify some assumptions, but I believe it is possible to strictly separate build steps from runtime installation. Perhaps instead of passing
torch
'sBuildExtension
class tocmdclass
, you could create a custom class and import from thetorch
package inside therun
method (which I think is the one that is run when a command is executed). Something like:This snippet is completely unverified though, so just the sketch of an idea. I'm not sure yet how to create the
ext_modules
list without importingtorch
globally though.rusty1s commentedon Aug 5, 2021
Thanks for digging into this. If you are interested, please feel free to contribute :)
Generic `kumo_loader` function that can points to snowflake/s3/local …
Abhishaike commentedon Nov 6, 2022
I'm confused, if
torch
is a dependency for this library, why is it not included in setup.py as a dependency?rusty1s commentedon Nov 6, 2022
We need to import torch in setup.py for compilation, so we cannot add it as a dependency. It needs to be installed in advance :(
JacobHayes commentedon Nov 17, 2022
I think thisshouldmight be possible with apyproject.toml
[build-system]
/requires
section from PEP 517, I'll put up a PR!While
pyproject.toml
can indeed define build-time deps, that's not sufficient to match the host's CUDA version.abrahme commentedon Feb 10, 2023
what is the consensus workaround here if there is one?
JacobHayes commentedon Feb 10, 2023
We currently have an install script that installs torch and then these packages. After that, we run
poetry install
. Since the installed versions of torch* don't match what poetry has locked (poetry expects eg:X.X.X
, but seesX.X.X+cu116
or whatever) and would try to reinstall them, we have some hacky code that renames the installed packages (insite-packages
) to remove the+cuXYZ
from the folder/metadata so it matches poetry's expectations.TL;DR pretty hacky. 😅 I think others may just avoid placing torch* in their
pyproject.toml
(assuming they don't have any transitive deps with it)?abrahme commentedon Feb 11, 2023
sorry, i'm pretty new to this and also my first time responding to a github issue so forgive me if this is the wrong way to go about it. however, i'm unsure what is meant by "avoiding placing torch* in their
pyproject.toml
" means in this context. is it that those torch dependencies are installed without the use of Poetry, and other non-torch dependencies go through poetry?JacobHayes commentedon Feb 18, 2023
@abrahme no worries, your response seems like the right way to go!
Yeah, I'd guess that's what others do. ie: the
[tool.poetry.dependencies]
would contain most deps but omittorch
,torch-sparse
, etc. Then, install those separately before or after thepoetry install
.Another approach I've seen people do is hard code the URLs to pull wheels/etc from. You can specify markers so the right file is used for each OS/CPU, but you would have to just hard code the cuda version (eg:
cu116
) in the URL and ensure it aligns with your host(s).10 remaining items