4 ms·
See, I feel like python has a lot of those benefits and the package management doesn't need to be so complex. Seriously, python package management can be fairl
by androidgirl 8y ago
See, I feel like python has a lot of those benefits and the package management doesn't need to be so complex.
Seriously, python package management can be fairly simple. On most of our machines at work, it's just "virtualenv .env && source .env/bin/activate". Then you install your packages and... everything is in one directory, like node_modules in javascript.
A clean reinstall is easy from there: remove the .env and just repeat.
I feel like pipenv violates KISS, and that a more traditional virtualenv/venv/pyenv setup is the way to go.
- umvi 8y ago> A clean reinstall is easy from there: remove the .env and just repeat. Repeat what, manually doing a bazillion `pip install`? Another nice thing about npm is the packages.json file it creates. This allows us to simply add that to version control and then all the new dev has to do is clone and run `npm install` which reads packages.json and installs everything inside of it. I'm sure there's a way to do it in python but, like everything else I bet it's a non-intuitive multistep process. JavaScript ========== First time installation: npm install express --save Subsequent times: npm install Starting clean: rm -rf node_modules Running application: node myapp.js Python ====== First time installation: virtualenv .env source .env/bin/activate pip3 install requests pip3 freeze > requirements.txt Subsequent times: virtualenv .env source .env/bin/activate pip install -r requirements.txt Starting clean: rm -rf .env [exit bash to clear environment] [start bash] Running application: virtualenv .env source .env/bin/activate python3 myapp.py For JavaScript I typed it all out from memory. For Python I had to consult StackOverflow because I couldn't remember "pip freeze". Yes it can be made simple with use of aliases and such, but like I said in my first post, out-of-the-box cognitive burden is several times greater than, say, npm or yarn.
- toyg 8y ago> [exit bash to clear environment] Wat? just deactivate before you rm. Please do not talk about things you clearly don't know well enough (which is patently the case if you can't rememer freeze and deactivate). > Out-of-the-box cognitive burden is several times greater You got any stats on that, or is it just your opinion? Because to me, the completely counter-intuitive --save parameter is much more painful to remember. The venv/pip workflow is not perfect, but what you've described is not the problem.
- umvi 8y ago> Wat? just deactivate before you rm. Ok sure, but starting clean is still a 2 step process (deactivate, remove) > Please do not talk about things you clearly don't know well enough (which is patently the case if you can't remember freeze and deactivate). Yes, I openly admit I do not know python's package management/virtualenv stuff well enough. And I don't care to learn either, because I don't use it enough for the investment to be worth it. My point still stands that for each javascript package management task that needs accomplished, you need 2-3x as many commands to accomplish the same thing in python. > You got any stats on that, or is it just your opinion? My opinion, of course, but shared by the dozens of people who upvoted my OP. > Because to me, the completely counter-intuitive --save parameter is much more painful to remember. In what way is --save counter-intuitive? If anything pip freeze is counter intuitive. How does it know what to save? Does it just save everything you've ever installed? What if you don't want to save everything, just a few of them? Also, --save and --save-dev allow you to segregate developer dependencies from production dependencies. Is there a way to do that with python? Again, just a guess, but it's probably going to be an unintuitive 3-4 step process that I'll no doubt find on stack overflow.
- toyg 8y ago> Yes, I openly admit I do not know python's package management/virtualenv stuff well enough. And still, you are here trying to measure the length of your "commands" with others' "commands". > My opinion, of course, but shared by the dozens of people who upvoted my OP. Ah great, engineering by acclamation. That usually ends well. That's how we got pipenv, btw: a popular developer stood up and declared "I'll fix it!", to general acclaim from the Powers That Be... and then things broke harder, and here we are. > for each javascript package management task that needs accomplished you need 2-3x as many That's precisely the perspective that led us to the mess that is pipenv: "npm is the model, we should all be like npm". Except npm fundamentally serves only a few specific needs, and was built on the lawless prairies of an ecosystem with limited aims, no stdlib, and without 28 years of accumulated legacy practices; whereas python has been pulled in every direction for literally decades, and now has to herd all that legacy into something more coherent, slowly (because this or that constituency will be ready to scream about breaking compatibility, as we've just had to endure for about 10 years with py3) and correctly - to avoid ending up in situations like the periodic breakage that happens in npm because this or that package has misbehaved. > In what way is --save counter-intuitive? "I've already told you to install, why should I repeat the concept? Are you really so dumb a 'manager' that you would ignore what you just installed?" And btw, Stack Overflow says --save is actually obsolete since 2013 at least [1], so it looks like you don't know npm very well either. Maybe we should just give up and build an AI that learns development from SO, and find ourselves more meaningful jobs. [1] https://stackoverflow.com/questions/19578796/what-is-the-save-option-for-npm-install https://stackoverflow.com/questions/19578796/what-is-the-sav...
- androidgirl 8y agoYour opinion here is totally valid. Npm has a lot more magic involved than doing stuff by hand with virtualenv. And yes, aliases and bash scripts help a lot, but do increase initial overhead. I have the entire "delete create install" sequence in an alias as well as activate in another. But envs are just files, you can even skip activate and just do `.env/bin/python` and it works. That's powerful in a linux shell because now I can just use that environment like a regular executable from anywhere, no global installs required. I can appreciate preferring something less manual even if I don't! Ultimately, your machine, your code.