Poetry: Poetry install takes too long and installs the package again unnecessarily

Created on 11 Dec 2018  路  6Comments  路  Source: python-poetry/poetry

  • [X] I have searched the issues of this repo and believe that this is not a duplicate.

Issue

I'm wondering why it takes 13-30 seconds to install my package (on two different machines).
This occurs when the package and it's dependencies are already installed.
`$ time poetry install -vvv
Using virtualenv: /Users/apayne/Envs/smithers
Installing dependencies from lock file

Nothing to install or update

  • Skipping markupsafe (1.1.0) Already installed
  • Skipping click (7.0) Already installed
  • Skipping itsdangerous (1.1.0) Already installed
  • Skipping jinja2 (2.10) Already installed
  • Skipping werkzeug (0.14.1) Already installed
  • Skipping aniso8601 (4.0.1) Already installed
  • Skipping flask (1.0.2) Already installed
  • Skipping jsonschema (2.6.0) Already installed
  • Skipping pytz (2018.7) Already installed
  • Skipping six (1.11.0) Already installed
  • Skipping flask-restplus (0.12.1) Already installed
  • Skipping passlib (1.7.1) Already installed
  • Skipping peewee (3.7.1) Already installed
  • Installing smithers (0.1.0)

real 0m29.542s
user 0m5.344s
sys 0m2.370s`

Smithers is the name of the package I'm installing with poetry. The installing smithers step takes the majority of the time. Is poetry doing anything but creating a symlink? I don't understand why this should take so long. If the package is already installed in editable mode, why does poetry try installing it again?

Much thanks!

CLI Feature Installation

Most helpful comment

The install command installs the current project in editable mode by internally creating a temporary setup.py file and executing pip install -e .. It does it each time install is executed to ensure that any new elements like entrypoints are properly installed.

I plan on adding an option to install to disable the installation of the current project.

All 6 comments

The install command installs the current project in editable mode by internally creating a temporary setup.py file and executing pip install -e .. It does it each time install is executed to ensure that any new elements like entrypoints are properly installed.

I plan on adding an option to install to disable the installation of the current project.

@sdispater is there any reason for the use of a setup.py instead of creating the appropriate directory structure/updating the virtual env directly?

If there is a better ticket to mention this in, please let me know.

@bertjwregeer For pure python projects, we could do without the setup.py file. This would require creating the proper files and directories which are, as far as I know, an easy_install.pth in the site-packages directory of the virtualenv and the {project}.egg-info directory in the current directory project.

This is not possible however for packages with C extensions for instance. Poetry does not come with a compiler and as such has to rely on the setup.py file.

The current "hack" for Poetry to do C extensions is to add extra content to the setup.py that is generated, correct? If it can be detected when that is the case and only then do the setup.py way, that would be fantastic.

Building plugins to allow building Cython/C extensions for poetry would be even better, but that can come later.

My current workaround is to use the --dry-run argument as a default in my build script for development. I just override that argument when I actually want it to poetry install.

@bertjwregeer This is one way to go, yes, and an easy one. I can probably target that for the 1.0.0 release.

Was this page helpful?
0 / 5 - 0 ratings