• JATth@lemmy.world
    link
    fedilink
    arrow-up
    14
    ·
    edit-2
    17 hours ago

    Python is just a pile of dicts/hashtables under the hood. Even the basic int type is actually a dict of method names:

    x = 1;
    print(dir(x))
    ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', ... ]
    

    PS: I will never get away from the fact that user-space memory addresses are also basically keys into the page table, so it is hashtables all the way down - you cannot escape them.

  • demesisx@infosec.pub
    link
    fedilink
    English
    arrow-up
    12
    ·
    2 days ago

    This is why I decided to learn Nix. I built dev environment flakes that provision the devshell for any language I intend to use. I actually won’t even bother unless I can get something working reliably with Nix. ;)

    For example, here’s a flake that I use for my Python dev environment to provide all needed wiring and setup for an interactive Python web scraper I built:

    
    {
      description = "Interactive Web Scraper";
    
      inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs?ref=nixpkgs-unstable";
        utils.url = "github:numtide/flake-utils";
      };
    
      outputs = { self, nixpkgs, utils }: utils.lib.eachSystem ["x86_64-linux"] (system: let
        pkgs = import nixpkgs { system = system; };
      in rec {
        packages = {
          pyinputplus = pkgs.python3Packages.buildPythonPackage rec {
            pname = "pyinputplus";
            version = "0.2.12";
            src = pkgs.fetchPypi {
              inherit pname version;
              sha256 = "sha256-YOUR_SHA256_HASH_HERE";
            };
          };
    
          pythonEnv =
            pkgs.python3.withPackages (ps: with ps; [ webdriver-manager openpyxl pandas requests beautifulsoup4 websocket-client selenium packages.pyinputplus ]);
        };
    
        devShell = pkgs.mkShell {
          buildInputs = [
            pkgs.chromium
            pkgs.undetected-chromedriver
            packages.pythonEnv
          ];
    
          shellHook = ''
            export PATH=${pkgs.chromium}/bin:${pkgs.undetected-chromedriver}/bin:$PATH
          '';
        };
      });
    }
    
    
      • demesisx@infosec.pub
        link
        fedilink
        English
        arrow-up
        9
        ·
        2 days ago

        It feels like magic. I think of it as the glue that makes almost all of my software work together seamlessly. I can’t wait to use it for one-click deployments of my software on a server or high-availability cluster.

  • gerryflap@feddit.nl
    link
    fedilink
    arrow-up
    13
    arrow-down
    1
    ·
    2 days ago

    Good meme. However I do think that most people starting out will not really have to deal with any of those issues in the first few years apart from maybe the pip/venv/poetry/etc choice. But whatever they’ll pick it’ll probably work well enough for whatever they’re doing. When I started out I didn’t use any external libraries apart from pygame (which probably came pre-installed). I programmed in the IDLE editor that came with Python. I have no idea how I functioned that way, but I learnt a lot and hat plenty of fun.

    • embed_me@programming.dev
      link
      fedilink
      arrow-up
      11
      ·
      2 days ago

      What about the issue where people try to install new version of python sometimes try to uninstall the “old” pre-installed version on a linux system and thus borking the whole s

      Definitely not me, anymore

      • gerryflap@feddit.nl
        link
        fedilink
        arrow-up
        7
        ·
        2 days ago

        I may or may not have done this haha. I’m a threat to any working piece of software, just enough knowledge to be able to break shit and too little knowledge to avoid breaking shit. I think after all these years I’ve mostly learnt my lesson though. The package manager is the boss, and if I don’t like it I have to work around it without upsetting the package manager

  • GTG3000@programming.dev
    link
    fedilink
    arrow-up
    9
    ·
    2 days ago

    Man, the variable scoping thing is insidious. It will never not be weird to me that ifs and loops don’t actually create a new scope.

    And then you try to do a closure and it tells you you didn’t import anything yet.

    • elliot_crane@lemmy.world
      link
      fedilink
      arrow-up
      7
      ·
      2 days ago

      This is basically what I’ve been telling people for years. Prototype in Python to get the concepts down, then when you’re serious about the project, write it in a serious language.