Skip to content

pip install -e . equivalent? #34

Closed

Description

@kootenpv

We cannot run pip install -e . because there is no setup.py. What would be the way to achieve this using poetry?

Activity

  1. sdispater commented on Apr 3, 2018

    @sdispater
    Member

    No, this is not possible right now. And I don't think I will add an equivalent since it always seemed like a hack to me. But I might be wrong.

    Why do you need pip install -e .? So I can see if there is a "poetry way" to do what you want.

  2. kootenpv commented on Apr 4, 2018

    @kootenpv
    Author

    I often depend on some local packages, for which I want to be able to change some code and not have to reinstall.

  3. sdispater commented on Apr 4, 2018

    @sdispater
    Member

    I see.

    The thing is poetry is a dependency/project management tool and is not intended for such use cases.

    However, if you really want to to this, you can build your project poetry build and take the setup.py file from the generated tarball and then you should be able to do pip install -e .

  4. kootenpv commented on Apr 4, 2018

    @kootenpv
    Author

    Ah sorry, with local I mostly meant "developing local packages". I do believe poetry is also for helping with that? It sounds like barely any work to automate that part and create e.g. the poetry develop command.

  5. sdispater commented on Apr 4, 2018

    @sdispater
    Member

    Well, poetry can help you develop local packages by orchestrating your dependencies, sure. But it is not meant to support the use case of having only local packages that depend on each other since this is not the best practice that poetry tries to endorse.

    However, if you are willing to make a Pull Request, I would gladly take a look at it.

  6. winni2k commented on Apr 5, 2018

    @winni2k

    I might be off the mark here, but in my experience, I usually use pip install -e . in order to allow my acceptance tests to see the python project I am testing. Is that what we are talking about here?

  7. sdispater commented on Apr 5, 2018

    @sdispater
    Member

    I don't see why you would need pip install -e . for your tests to work. If you are inside a virtualenv your dependencies should be picked up by your tests.

    In poetry that would be:

    poetry install  # install your dependencies
    poetry run pytest tests/
  8. kootenpv commented on Apr 5, 2018

    @kootenpv
    Author

    I'm not sure, but when you share a module in git, with other dev members, it's nice when it is updated automatically on pull. Or is this automatically managed in pycharm or something? I use emacs without virtualenvs but just simply different python versions.

  9. winni2k commented on Apr 6, 2018

    @winni2k

    In Pycharm you set the environment by choosing a python interpreter in your directory tree. Packages are discovered from that AFAIK.

  10. winni2k commented on Apr 6, 2018

    @winni2k

    I guess this is a bit of a style question, but I like to build a wheel for local packages and use pip to install them into my venv. Is that the workflow that is intended by poetry?

  11. sdispater commented on Apr 6, 2018

    @sdispater
    Member

    @winni2k Not at the moment, no. For now, poetry assumes each dependency is located in a remote repository (PyPI or a private one) or is a VCS dependency, and does not support local packages.

    That might change in the future, however but I can't give you an ETA.

    I am trying first to support the most common use cases, like installing from PyPI before diving into more specific workflow, especially if they are not the recommended way of managing packages.

  12. kootenpv commented on Apr 6, 2018

    @kootenpv
    Author

    It now also does not allow me to use it in the interactive interpreter :/

    I tried using poetry build, then copy out the setup.py to the root level but that doesn't work. I'm very disappointed :(

    Until this becomes important, I wish there'd be a nice hack. I'm wondering though how do you develop - how do you avoid having to constantly reinstall?

  13. sdispater commented on Apr 6, 2018

    @sdispater
    Member

    @kootenpv I just tested and copying the setup.py file works.

    I don't know how you develop, but I never need pip install -e .. I either upload my packages to PyPI or a private index, or I install from a git repository.

  14. woutervh commented on Apr 18, 2018

    @woutervh

    I don't know how you develop, but I never need pip install -e .. I either upload my packages to PyPI or a private index, or I install from a git repository

    Ugh, that is not developing, that is installing a finished package.

    These are roughly equivalent, in your src dir:

    pip install -e .
    python setup.py develop

    It's called "installing a package in development mode". They are the starting point of beginning development. If you are not familiar with that, then I honestly do not understand how you do development.

    I know two ways of doing development without it:

    export PYTHONPATH=
    or in your code:
    import sys
    sys.path.append(....)

    Are you recommending this? (I hope not)

  15. sdispater commented on Apr 18, 2018

    @sdispater
    Member

    No, I don't modify sys.path(). And please don't be condescending.

    So, if I develop a library (or an application for that matter) I put myself in my project directory. At this point I have access to my module: I can import it in my tests to test it.

    You can test this yourself: clone the poetry repository place yourself in it install the dependencies with poetry install and execute poetry run pytest tests/ and everything will work. You do not need pip install -e .

    If you need it in another project, and that is why you install it in develop mode, the you have dependencies between project and in this case I recommend to use a private index and release preversions or installing from git repository and updating when needed.

  16. 187 remaining items

  17. NeilGirdhar commented on Mar 4, 2022

    @NeilGirdhar
    Contributor

    @adam-grant-hendry I'm not sure.

  18. adam-grant-hendry commented on Mar 4, 2022

    @adam-grant-hendry

    @NeilGirdhar I've created a new Discussion titled "RE: Issue #34 - pip install -e . equivalent?" (#5276). Please feel free to join me there.

  19. adam-grant-hendry commented on Mar 4, 2022

    @adam-grant-hendry

    It's not about adding commands to poetry. This issue was about extending the backend to support editable installs using a package installer like pip, which it now does.

    @NeilGirdhar
    This is a distinction without a difference. It reads the same as "this issue isn't about adding a feature. it's about adding a feature."

    There is a reason why I said what I am saying is "in simple terms"

  20. NeilGirdhar commented on Mar 4, 2022

    @NeilGirdhar
    Contributor

    This is a distinction without a difference. It reads the same as "this issue isn't about adding a feature. it's about adding a feature."

    There is a difference:

    Adding commands to poetry means adding to the front end, i.e., things you do on the command line poetry add, poetry install, etc. Extending the backend is completely different. These are not commands that the user does. These are hooks that are accessed by the installer.

    The reason that the backend has to change is that you need to be able to install a poetry project in editable mode in an ordinary (non-poetry) virtual environment. The front-end won't help you there.

  21. golgor commented on Mar 7, 2022

    @golgor

    Another possible reason to be using a setup.py is when handling with system drivers. I was working with a python project that needed control of the I2C-bus to communicate (i.e. i2c-dev).

    I set everything up with adding my own user to the correct group (i2c), and everything was working when running the script outside of Poetry (running via Pyenv). When I tried to run it via poetry run I only got errors regarding permissions. I double-checked the user in the virtual environment, and everything seemed fine but still couldn't get it to work.

    I didn't spend a lot of time on it as I found the workaround in here regarding moving the setup.py from the tarball and installing my package as editable install via pip to work fine. Might even be there is already some workaround in Poetry?

    If that is not the case, this might not be a reason for making changes. It is however a possible solution if you are working closer with system drivers and are having issues with permissions.

  22. adam-grant-hendry commented on Mar 9, 2022

    @adam-grant-hendry

    @golgor Are you looking for help? If so, I'm happy to help where I can on a Discussion. Let me know. You could provide some more info about your pyproject.toml and dig deeper.

  23. golgor commented on Mar 9, 2022

    @golgor

    @adam-grant-hendry As mentioned I got it to work, but it might not be a good solution. I will write in the discussion, thanks for reaching out!

    Edit:
    I tested it again just now with using poetry run <script> and it was actually working. I did some trouble-shooting again and it seems that the problem might actually be in the implementation of the terminal in VS Code. If I run poetry run <script> in my system terminal, everything works great, but if I run the same command in the internal VS Code terminal I get permission problem (even though the user is correct).

    I.e. this doesn't seem to be a problem for Poetry but rather some settings regarding the terminal setup of VS Code. I guess it doesn't make sense to write anything in the discussion then. I will look into this elsewhere. Thanks a lot though for reaching and offer help.

  24. added a commit that references this issue on Apr 21, 2022
  25. thautwarm commented on Jul 15, 2022

    @thautwarm

    Cross-language project here. Poetry troubles a lot.

  26. neersighted commented on Jul 24, 2022

    @neersighted
    Member

    Hey all, this issue has been conflated and confused many times, and the issue it was meant to address has been long since solved. Most of the conversation relates to workflow issues, X-Y questions, or possible feature requests.

    For those stumbling onto this issue, check out @finswimmer's summary, which I will re-state here:

    • When you poetry install, the root package(s) (the ones that live in your repo) are installed as editable into your venv.
    • Path dependencies with develop = true in pyproject.toml are installed as editable.
    • Poetry 1.2 betas add a poetry add --editable that sets the develop flag in pyproject.toml.

    poetry-core also supports PEP 660 in the stable and beta versions, which allows for a Poetry-managed project to be installed in editable mode by any PEP 517 frontend (e.g. Poetry itself, pip, etc) that also supports PEP 660.

    If you want to discuss workflow issues/improvements, please head over to the Discussions tab or join the Discord server.

    If you're looking for a feature/enhancement that can streamline your workflow related to this, please do a good look to make sure there are no duplicate issues first (or ask on Discussions/Discord if you're not sure) -- then open an issue with your suggested feature/design.

    I'll be locking this issue as it's considered long-solved and further comments are just sending a ton of notifications and blurring the issues under discussion.

  27. locked as resolved and limited conversation to collaborators on Jul 24, 2022
  28. neersighted commented on Jul 25, 2022

    @neersighted
    Member

    An addendum from @mraleson on Discord:

    If you try to install a poetry package locally using pip in editable mode pip install --editable ./ and get an error like ERROR: File "setup.py" not found. Directory cannot be installed in editable mode. You must make sure your pip version is > 21.3 and your poetry project specifies poetry-core version > 1.0.0:

    [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api"
    

    In essence, what I wrote about above only applies to contemporary versions of poetry-core and pip.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions