I was just editing my Dockerfile and suddenly IntelliJ showed me the message “No” without any context.

  • bamboo@lemmy.blahaj.zone
    link
    fedilink
    English
    arrow-up
    5
    ·
    20 hours ago

    Curious what others have to say, but my go to is to have a requirements.in with direct packages I need for the project, and then run pip-compile to generate all the dependencies with their exact version at the time so that deployments are repeatable. This works well for deployment, but if I were writing a library for others to use, I think you put the direct dependencies in setup.py

      • bamboo@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        3
        ·
        18 hours ago

        Well if the requirements.txt is pinned to a specific version of a dependency of a dependency, you might not know or really care why that’s set. But then this becomes a nightmare and dependency hell laterif you want a newer version of some package, and that newer version requires a bunch of newer packages and loses the others. At that point you probably will toss your old file and start a new one from scratch piecing together all the requirements with like pip freeze in a new virtual environment.

        Sure you could omit the versions, but then everytime you deploy, you don’t know what you’re going to get and a deployment today would be very different next week with a whole bunch of different versions of dependencies.

    • mickkc@lmy.ndu.wtfOP
      link
      fedilink
      arrow-up
      1
      ·
      20 hours ago

      I don’t quite understand that. I did some research, and I read that the requirements.txt is somehow generated from requirements.in. But what is the difference between the two files then? Could you give me an example of what a requirements.in file would look like?

      Thank you!

      • scrion@lemmy.world
        link
        fedilink
        arrow-up
        3
        ·
        17 hours ago

        Please use a pyproject.toml file for both project setup and dependency management. It actually is standardized now in PEPs.

        uv is a great tool, now comes with a build tool as well. It has become a de-facto standard.

      • mickkc@lmy.ndu.wtfOP
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        19 hours ago

        Ohhh now I get it. It’s basically like package.json and package-lock.json in node, but for Python.

        It’s a bit strange to me that this isn’t the default in Python…

        • bamboo@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          2
          ·
          18 hours ago

          Yes exactly, like if I know my app needs the requests library, I will just put that in requirements.in but after compile requirements.txt will include the exact version of requests and every version of each dependency. So that every time pip install is run, all dependencies are always the same despite what happens upstream