60 ms·
Ask HN: Best Alternative to Homebrew in 2021?
Yesterday I ran `brew install virtualenv` and homebrew decided to upgrade postgres, ruby, youtube-dl, vim, rust, wget and 50 other unrelated packages. The single command took 45min and broke all of my local postgres databases (and who knows what else).
At this point I should know better than to install postgres via homebrew, but unwanted/unasked-for upgrades is not a feature I'm looking for in a package manager.
What's your experience with other package managers for macOS? Currently looking into macports & nix and not sure which one to choose...
- rrock 5y agoOne vote in favor of macports here. I first went from homebrew to nix. Nix was fine, the concept is great but I found the language to be difficult. Ports is closer to homebrew in its simplicity, and has a big catalog (including much of the scientific stack that was removed from homebrew).
- dan353hehe 5y agoI’ve used pkgin[1] on my Mac. It works fairly well, and I appreciated how quick the installs were. [1] https://pkgsrc.joyent.com/install-on-osx/ https://pkgsrc.joyent.com/install-on-osx/
- jolux 5y agoI didn’t think brew upgraded packages automatically? Just updated the index? Am I missing something here?
- lelandfe 5y agoI believe a proper ‘brew update’ does indeed get ran when doing an install.
- mdaniel 5y agoThey have a separate env var with language that matches OP's experience: HOMEBREW_NO_INSTALL_UPGRADE If set, brew install will not automatically upgrade installed but outdated formulae https://docs.brew.sh/Manpage#HOMEBREW_NO_INSTALL_UPGRADE https://docs.brew.sh/Manpage#HOMEBREW_NO_INSTALL_UPGRADE (that's a fake hyperlink cause they don't put named anchors on their <li> for some reason) updated with an actual hyperlink: https://github.com/Homebrew/brew/blob/3.3.2/docs/Manpage.md?plain=1#L2091 https://github.com/Homebrew/brew/blob/3.3.2/docs/Manpage.md?...
- jolux 5y agoWow, terrible misfeature. Why is that the default? I could maybe understand it if it were just dependencies, but upgrading everything is insane.
- mikemcquaid 5y agoIt doesn't upgrade everything. It upgrades dependencies and dependents of those dependencies (which, admittedly, can feel like everything). It does this because the alternative is sometimes breaking things. A "breaking things without this example": - you want to install something that depends on `readline` - the binary package for the thing you want requires the latest `readline` - this upgrades `readline` on installation Now, we have a choice. Either we upgrade _everything_ that depends on `readline` that you have installed or we knowingly break some of the things you have installed that depend on `readline`. We choose the safer option by default. If you leave it a long time between updating: you are more likely to have more dependencies updated which requires more dependents to be updated.
- ayewo 5y agoI'm inclined to agree, but it seems Ubuntu's solution to this problem with "apt install <package> [-y]" where you are presented with a list of dependencies that will get upgraded if you choose to proceed is a much better trade off. The user can of course ignore the dependencies notice by specifying the "-y" flag to force an installation.
- mdaniel 5y agoI hadn't actually considered it until you explicitly mentioned it, but yes: I'd bet a lot of the frustration when using brew would go down if brew just chose to _say_ what it was going to do, and _ask_ if that was ok, instead of assuming the user completely delegates that choice over to brew I am aware of the "brew pin" command, and I do think it would have saved OP some heartache, but I think your suggestion of prompting before transitive changes would be the most pro-user way
- 5y ago
- jayflux 5y agoI think a few years ago they made updating all packages on install the default for some reason
- tclancy 5y agoIt changed a while back. Definitely surprised me in a bad way in the last year or two and I went through something similar to the OP. That said, I stuck the env variable in my shell setup and I would point out brew does include tooling to upgrade databases from one major version of Postgres to the next so you can get back and running (unless you have cause to stick with a certain version to match server setup, which is a bit of a pain).
- trevex 5y agonix has a very steep learning curve, but I have been using it on macOS for a while now. Can’t recommend it enough. Even started using it on my personal PC, which allows me to use the same nix flake on both systems. EDIT: Personal PC is running NixOS not Windows.
- rgoulter 5y agoNix does have a steep learning curve. But, you're also very likely to install most of what you want easily. Some other downsides: - Nix installations can take time. Nix packages can either build from source, or download from a binary cache. If it's not in the cache, it will build from source. - Nix can take up a significant of storage space. However, e.g. Nix is amazing at rolling back package installs; and installing a package with nix won't ever break another package installed by nix. If you like the phrases "pure/immutable", "declarative", "functional programming", etc. then you'll like Nix. -- If those words don't excite you, then you'll not like Nix.
- rubyist5eva 5y agoJust disable the auto-updates. Also, I'm 100% certain all it did was update the formulae (similar to apt-get update, NOT apt-get upgrade). I've been using homebrew for years and this is the default behavior, so unless you purposefully set it up to upgrade everything this is PEBKAC. AFAIK the only time it upgrades everything is when you do a blanket `brew upgrade`. And if you're pinned to something like postgresql@10 it will stay at that major version.
- nfRfqX5n 5y agoI avoid it at all costs. Sometimes it takes more time to figure out how to install something because guides are quick to recommend brew, but there's usually an alternative
- thefreeman 5y agoYou may have already tried it, but you can run `brew postgresql-upgrade-database` after postgres is upgraded to fix your local databases.
- abraxaz 5y agoConan can be made to do what homebrew does with minimal effort, I have written some convenience wrappers around it which makes it slightly easier to use for this use case, you can have a look here: https://gitlab.com/aucampia/proj/xonan https://gitlab.com/aucampia/proj/xonan
- bpiche 5y agoWhy are you using virtualenv instead of `python3 -m venv`? Just wondering.
- leonry 5y agoI cannot remember why, but I chose pkgsrc (https://pkgsrc.joyent.com/install-on-osx/ https://pkgsrc.joyent.com/install-on-osx/). It is however of varying quality.
- herbst 5y agoI too only used pkgsrc when I had a Mac developer machine. Afaik mostly because of their superior dependency management.
- dan353hehe 5y agoI have also used it. I switched once homebrew installed conflicting versions of OpenSSL and wasted weeks of time trying to get both MySQL and vim working at the same time. It is rough around the edges as some packages are missing if I remember right.
- throwaway4good 5y agoMacports
- protomyth 5y agoYeah, macports still works fine. It has an equivalent to the OpenBSD flavors and does versioning fine. The only pain point is OS upgrades.
- abzug 5y agoAnd the fact that it "needs" Xcode installed.
- jt2190 5y agoIf my pre-coffee memory is correct, Macports only needs command-line tools for XCode. xcode-select --install That said, MacPorts is often opinionated, e.g. they package certain versions of some software and not others.
- abzug 5y agoI just said what's on the "Installing MacPorts" section of the site: https://www.macports.org/install.php https://www.macports.org/install.php > 1. Install Xcode and the Xcode Command Line Tools
- Wowfunhappy 5y agoIt does not, it does need the "command line tools" installed. Certain ports require full Xcode but not too many.
- mdaniel 5y agoOne should bear in mind that it seems MacPorts takes a much more puritan approach to packaging than Homebrew, as this 18 month old ticket asking for awscli v2 (and its comment thread) shows: https://trac.macports.org/ticket/60452 https://trac.macports.org/ticket/60452 I didn't dig into the process for a user to add their own ports, or share new ports with a team, in order to more fully compare the two packagers, but that ticket stood out to me
- nrjais 5y agoYou can disable autoupdate by setting HOMEBREW_NO_AUTO_UPDATE env https://github.com/Homebrew/brew/blob/7d31a70373edae4d8e78d91a4cbc05324bebc3ba/Library/Homebrew/manpages/brew.1.md.erb#L202 https://github.com/Homebrew/brew/blob/7d31a70373edae4d8e78d9...
- FredrikMeyer 5y agoThis seems to control whether to upgrade homebrew itself?
- glintik 5y agoUpgrade homebrew itself AND other packages, see https://computingforgeeks.com/prevent-homebrew-auto-update-on-macos/ https://computingforgeeks.com/prevent-homebrew-auto-update-o...
- glintik 5y agoJust to add how to use it: HOMEBREW_NO_AUTO_UPDATE=1 brew install <formula>
- mfollert 5y agoBrew unrelated but especially for PostgreSQL on a mac I can highly recommend https://postgresapp.com https://postgresapp.com
- sergiomattei 5y agoCame here to comment exactly this, it’s an awesome app.
- Apreche 5y agoThe fact that homebrew is awful is one of the huge reasons I don’t use MacOS for development like all my co-workers. Instead I use Windows with WSL because the company won’t allow me a Linux laptop. If I had to use a Mac my solutions would be to alway use Docker, a virtual machine, or a remote dev environment of some kind.
- da39a3ee 5y agoWhat’s an actual concrete example of a problem you have with homebrew?
- zzbzq 5y agoFunny, I use Windows with WSL and the first thing I do when I set up a new WSL instance is get homebrew (linuxbrew) and install everything else through that if available. apt/dpkg and any other package manager that scatters files all over the filesystem is just an absolute disaster that--if you do a lot of R&D tinkering--eventually renders a computer unusable after a few years. That's what happened to my first WSL instance; no apt command would work anymore because it had broken its own dependencies.
- encryptluks2 5y agoIMO this is so cringe and far from the truth. If you want a slow non-standard package manager they litters your computer and breaks things then that is Homebrew. If you want standardized installs then use apt/pacman/APK and just don't install a lot of user packages not in default repos. Homebrew is one of the slowest package managers I've ever used.
- Zababa 5y ago> apt/dpkg and any other package manager that scatters files all over the filesystem is just an absolute disaster that--if you do a lot of R&D tinkering--eventually renders a computer unusable after a few years. That was your experience. Mine is that after using apt for a lot of R&D tinkering for 3 years, everything runs fine. apt is global. Sometimes that's great and that's what you want. Sometimes it's not. Another way to keep that in mind is to think as apt as "bad at doing cleanup". The thing is that you have to have a separation between things that you want on your system all the time, and things that you use for one or more projects. For the first, apt is perfect. For the second, usually that's where I use tools like nvm for node versions, languages package managers like npm, and also docker (which I use a lot for development databases). For a backend JS project, I would install nvm, npm and docker globally, and then for the project I would use node through nvm with a .nvmrc, install packages locally with npm and use a package.json and package-lock.json, and run the development database with docker through a npm command, usually the latest PostgreSQL version. The link between the backend and database would be made with environment variables, because that's also what I use in production. The difference between the global (apt) scope and the project (the rest) scope might seem like a failure of apt, but I personally see it as the difference between global and local scope in programming: both have their use, we separate them for a reason and we don't put the same things in them.
- BruceEel 5y agoMy experience is that both (Macports, Homebrew) are comically unreliable and frustrating to use. That said, with my insistence to install under $HOME, Macports seems to work slightly better. But truly, I got the best results from downloading and compiling every single flipping dependency myself.
- da39a3ee 5y agoHomebrew isn’t unreliable — I’ve used it for more than a decade with no problem. What’s an actual problem you have with it? Perhaps others here could help you.
- yesenadam 5y agoI've never had a problem with Macports and am wondering exactly the same thing. "Comically unreliable"?!
- Brian_K_White 5y agoThere is no help for problems such as how the main developers seriously thought it was fine to have a user account own a shared system directory for many years, until Apple finally just took control over that at the OS level and forced them to figure out some marginally less borken arrangement. Macports is a tougher sell for an average user today simply because the disparity in popularity means macports library is smaller and older. But macports is engineered more correctly.
- rbanffy 5y ago> until Apple finally just took control over that at the OS level and forced them to figure out some marginally less borken arrangement. This was my biggest complaint about Homebrew. Does it mean it was finally fixed?
- da39a3ee 5y agoIt seems to install into /opt/homebrew/ now, whereas previously it used /usr/local.
- glintik 5y agoI think, you don't need to choose any other package manager because homebrew is the most mature thing on macos. Just disable autoupdate when installing something: HOMEBREW_NO_AUTO_UPDATE=1 brew install <formula>
- civilized 5y agoAnd since this technique relies on setting an environment variable, you can of course put it in your .bashrc/.zshrc, restart your Terminal, and you'll never have to remember it again: export HOMEBREW_NO_AUTO_UPDATE=1
- apostacy 5y agoHomebrew stinks of over-optimization and deletionism. In contrast to how it used to be, Homebrew now seems designed for people that only want popular bleeding edge packages, and nobody else. If I just wanted to install google-chrome, sublime, and skype, I would use the app store. I used to use Homebrew to install more obscure packages that were useful to me, like Arduino, Processing, and some specialized bluetooth tools. It is especially frustrating because there are good reasons to not want bleeding edge. OSX ages pretty well, and new versions of macOS often remove important features. As long as you have security updates, I think it is reasonable if you run an older version of macOS. For some of us, Catalina and Big Sur were pretty painful, especially if they are a liability for how you make money. Losing total-terminal and total-spaces were a big blow to my workflow, and not at all simple to work around, as well as certain accessibility software. Homebrew being so aggressive about updating itself compounds many other issues it has. For one thing, major changes are made frequently, and it is very aggressive about pruning packages and only supporting recent version of macOS. So, I have lost count of the number of times Homebrew has broken itself. Homebrew will go out of its way to search through its history and tell you a package has been removed, but gives you no easy way to install them. Homebrew could make it fairly easy to revert updates, since so much of it is in a git repo, but it doesn't. I wanted to install an SNES emulator, and I was using an install of macOS from maybe two years earlier, and Homebrew installed a version that was incompatible with my OS. Since it was a cask, I don't think anything depended on it. I had to actually search through the Homebrew repo history and check out that specific formula, since nobody had a tap for it. Unless you are near the center of the bell curve, you don't matter. And it is a shame, because I really think that it wouldn't impose a significant cost to support more of us, and substantially improve its UX. Homebrew used to be a powerful repository of most macOS software. Some of its less used packages could be unreliable, sure, but that was the case regardless of where I got them. Now it is morphing into an App Store. This is part of why I gave up on macOS two years ago and went to Linux full time. I can't rely on Homebrew.
- notafraudster 5y agoI just reached the same breaking point -- and normally I am pretty sympathetic to software jank, but the maintainer of homebrew is so actively hostile and rude that my degree of empathy is significantly less -- and switched to Nix, which is quite good, conditional on three gotchas: 1. Nix has very limited support for GUI applications of the kind that you'd find in `brew cask`. Not no support, some of them are there, but limited support compared to brew. If you use brew as an out-of-the-box install-everything setup like me, you'll not be able to replicate that easily with Nix. 2. Nix can't currently build Swift applications because of some Xcode something I didn't fully understand. 3. I found a small number of packages that are broken on Nix on my aarch64 / M1 MacBook Air (and marked broken, so when you try to install it complains) and a small number that are broken without being marked broken. In specific, I think R was one that surprised me -- this is a major programming language and although the build requirements are onerous (it's a mix of C and Fortran), I would think it would work. That being said the actual process of installing, updating, and upgrading seems much faster and dramatically less shitty than homebrew, and so I recommend migrating stuff off of brew anyway.
- tikhonj 5y agoI had R working with Nix on my work Macbook, but this was on a version of Nixpkgs from several months ago. Of course, one of the upsides with Nix is that I can look up the exact version of Nixpkgs that was working for me because it's in a git repo with the rest of my dotfiles :).
- da39a3ee 5y agoWhat’s an actual concrete example of a problem you have with homebrew?
- apostacy 5y agoI posted a detailed comment of why Homebrew is a problem for me[1] if you would like to see. [1] https://news.ycombinator.com/item?id=29080519 https://news.ycombinator.com/item?id=29080519
- Doctor_Fegg 5y ago
- doniphon 5y agosorry OP by this is a clickbait rant from someone who just did not made his homework and ended loosing time and data. - Homebrew is rolling - always was and never claimed otherwise. - OTOH for key packages (say databases) it has available versioned bottles. for postgresql one have: - postgresql@10 - postgresql@12 - postgresql@9.4 - postgresql@9.6 - postgresql (points to latest) - postgresql@11 - postgresql@13 - postgresql@9.5 - Finally, no one is forced to update everything at all. run `brew outdated` and pick whatever you want updated then `brew update foo`... In short, none of what happened to the OP is due to inherent flaws in homebrew... QED.
- devoutsalsa 5y agoFor databases specifically, I like a little tool called DBngin. It's perfect on MacOS for installing various versions of databases. I used to install MySQL 5.7 for an older legacy application because I was finding it challenging to juggle different versions on MySQL w/ Homebrew. I know it handles MySQL, PostgreSQL, and Redis. Maybe is handles other stuff, but I haven't checked. https://dbngin.com/ https://dbngin.com/
- da39a3ee 5y agoWhy did you want to `brew install virtualenv`? That’s no longer the current way to work with python. Virtual environments are now in the standard library: python -m venv /my/directory I’ve never had any problem with homebrew in over a decade’s usage. But yes, don’t use it for python development tooling: use pyenv and python -m venv and pip for that.
- kortex 5y agoI can't recommend pyenv and pipx enough. I use brew to install pyenv and pipx, and there ends my interaction with brew and python. Pyenv builds all of my python versions. Pipx installs cli tools in their own env. Precommit is also great for much more than just pre-commit hooks. It can install tools used for hooks in their own cache, no need to manage venvs yourself.
- rbanffy 5y agoPyenv will setup Python environments under your user and replace the system Python executable with a shim. Depending on your setup, it can create a lot of confusion (I have fixed a lot of colleague machines in the past year that were broken in one way or another). Doing a `python[V.v] -m venv …` and then sourcing `activate` is conceptually much simpler and doesn’t affect any other terminal sessions you may have open.
- Brian_K_White 5y agoMe 11 minutes from now: "why did you use venv? They replaced that 11 minutes ago with ..."
- da39a3ee 5y agoNo. If you’re not an experienced python programmer then I can see that your comment might seem like a witty contribution. But I was actually providing good advice.
- Brian_K_White 5y ago
- xyzzy_plugh 5y agonix. It's confusing, but we'll get there. You'll need/want: - nix, the tool/build system. - nixpkgs, the world's most up-to-date and underfunded package repository. - nix-darwin, bringing a NixOS experience to Darwin. Not perfect, but pretty damn great. And optionally, - home-manager, a nix-based opinionated tool to manage dotfiles and other stuff in your home directory. And finally, some things to avoid and experimental features to use: - do not ever use `nix env -i` to install things ala homebrew, apt, etc. This is a trap. You don't want this. - use nix flakes. Sure, it's experimental, but it's what you _do_ want. Reproducible, version-pinned builds. - if you use direnv, or are familiar with it, check out nix-direnv, which is like direnv on crack. Instead of managing your packages globally, manage them per workspace or project.
- sirodoht 5y agoSo you're saying use nix flakes instead of `nix env -i`? I've been using `nix env -i` without any issues till now, but I'll explore nix flakes.
- rgoulter 5y agonix-env -i package by package? I think the next step in the journey is describing what you've got installed with a package: https://nixos.org/manual/nixpkgs/stable/#sec-declarative-package-management https://nixos.org/manual/nixpkgs/stable/#sec-declarative-pac...
- sirodoht 5y agoPackage by package, yes. I had followed this tutorial: https://youtu.be/NYyImy-lqaA https://youtu.be/NYyImy-lqaA What your link describes though looks better. I’ll give it a try, thanks.
- rgoulter 5y agoI disagree with "don't use nix-env --install; use <much harder thing> instead". I see "nix-env --install" as a gateway drug to using Nix. It's effortless, and already easy to see benefits from using Nix (like you can easily get the same set of packages on different OSs). Rather, it's worth explaining why it's bad to use. The footgun I ran into was that I'd caused a messy state by installing something and forgetting I'd installed it. Maybe nix flakes and home-manager and nix-darwin are really cool.. but they're also much harder to use, and surely overwhelming for someone who just wants a way to install packages. I think it's like telling someone to learn Kubernetes when they're wondering how to serve the website they wrote. -- I think it's easier to appreciate these once you've gotten your feet wet with nix.
- yakubin 5y agoA while ago there was a post on HN about pkgsrc[1][2][3], which works on Mac, among other platforms. I haven't tried it, but it may be worth a shot. [1]: <https://rubenerd.com/using-netbsds-pkgsrc-everywhere-i-can/ https://rubenerd.com/using-netbsds-pkgsrc-everywhere-i-can/> [2]: <https://news.ycombinator.com/item?id=27293108 https://news.ycombinator.com/item?id=27293108> [3]: <http://www.pkgsrc.org/ http://www.pkgsrc.org/>
- mdaniel 5y agoI checked and it appears to suffer from the same problem as MacPorts in only making the ancient version of awscli available: http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/net/py-awscli/index.html http://cdn.netbsd.org/pub/pkgsrc/current/pkgsrc/net/py-awscl... I wasn't able to immediately find any issue tracker for pkgsrc packages, and it seems they're a "mailing list and IRC" type setup, which if true means it definitely isn't for me
- alnja8a 5y agowhy does the protocol by which bugs and problems get tracked matter, its not like you dont have an email address already... the bug reporting tool is mentioned on the packages page but not the most clear. http://www.pkgsrc.org/#index2h1 http://www.pkgsrc.org/#index2h1
- mdaniel 5y agoI did qualify "for me," indicating that system is not the way that I want to interact with a project The answer to your question is that searching years of email threads is not the same UX as navigating to a dedicated page for managing the lifecycle of a (bug|feature) that tracks when I can expect a new, or working, version of -- in this case awscli-v2 -- to show up, or (if reasonable) that I can indicate to others that I'm willing to take responsibility for doing the work to package it, in order to avoid duplicated effort Plus, again for me, I don't need more email traffic in my life
- 5y ago
- tonoto 5y agoHave a look at pkgsrc - https://www.pkgsrc.org/ https://www.pkgsrc.org/ It is my first choice since a while and if it's not there I go to homebrew
- ronenlh 5y agoI started using nix. It’s difficult and search results are not often helpful.
- Smaug123 5y agoFight through it for another couple of weekends - the Stockholm syndrome feels sooo gooooood! I found it much more helpful to find people's own Nix setups and learn from them, by the way. Mine is at https://github.com/Smaug123/nix-dotfiles https://github.com/Smaug123/nix-dotfiles - like all such things, it's a WIP, and I'm definitely still a noob, but bits of it may be able to help.
- Majestic121 5y agoYour honesty is refreshing. I've seen countless people trying a new technology/tool, and overselling it as 'amazing' and super easy. Seeing a post like yours helps to keep the discussion grounded in reality, with tools that looks nice on paper but have practical downsides as well.
- abathur 5y agoI agree with this general sentiment, but I'll add that it's worth reading most posts about Nix through this lens. Finding your sea legs is rough, and IME people who completely deny this are few and far between. The reward is a pretty impressive lever.
- ronenlh 5y agoThe thing I use and like most in nix is nix-shell. I set up a shell.nix file on my projects, and together with direnv the environment switches with the right dependencies for each project. Shameless plug, I wrote about this recently on medium: https://link.medium.com/cYkKMtdHRkb https://link.medium.com/cYkKMtdHRkb
- pxc 5y agoNix IS amazing. It is NOT super easy. Parts of it are getting easier, and it has an exceptionally smart and helpful community. But it's not smooth and pretty and easy to pick up like Homebrew is. (And that does suck)
- Bad_CRC 5y agoAfter years of dealing with it I just run most of the software from docker containers and use homebrew for random cli tools.
- jamil7 5y agoThis was also going to be my comment, homebrew for cli tools and casks for some gui apps, all other environments in docker containers.
- geerlingguy 5y agoDitto. Anything mission critical runs in Docker via Docker-compose, so I can manage every aspect. And for any cli tool that's also mission-critical, it can be run within Docker so I can pin it or keep it bleeding edge more easily. For the important stuff, performance and ease of installation can take a side seat to stability.
- handrous 5y agoHomebrew needs to do a better job of communicating that you shouldn't use it for project dependencies, because every time there's a Brew thread on here, a bunch of people come out complaining about this kind of thing. "Homebrew broke my build by updating PostgreSQL and Redis". They shouldn't need to communicate that, but clearly, they do. Use Docker, probably. Homebrew is for your tools, not your dependencies. Is the system you're deploying to a Mac with Homebrew? Do all your collaborators use Macs with Homebrew? If the answer to either is no, why were you trying to use Homebrew for that in the first place, even if it were otherwise good for that? Would you use Homebrew to install Node modules for your project? Python packages? No? When why are you letting it define which version of PostgreSQL this project depends on?
- Doctor_Fegg 5y agoGenuinely, is this attested as the project philosophy anywhere? Because right now https://brew.sh https://brew.sh leads with "The Missing Package Manager for macOS", which would lead anyone to think it does the same as a package manager for Linux, and they're _full_ of developer dependency packages.
- zzbzq 5y agoIf your only problem is you don't like it surprise-updating everything, maybe you should set up an automated patching schedule.
- chimen 5y agoThis si literally why docker exists. I would never install something on a system and then complain it is being updated from time to time. The system needs to stay safe and follow a path of updates in order to cover vulnerabilities and such. Put it in docker and version lock it.
- saagarjha 5y agoDocker performs pretty poorly on macOS.
- pluc 5y agoIf you want package managers, go Linux.
- jbj 5y agoI have reasonable experience with macport, just remember to enable multithreading, or it can be exraordinarily slow.
- fnord77 5y agoI very much dislike that autoupdate is the default. This is user-hostile. I instructed you, brew to install something. Not to spend an eternity autoupdating things.
- yakkers 5y agoI've personally had very good experiences switching back from Homebrew to MacPorts. Wouldn't go back to Homebrew. I find it much faster now, which is quite funny to me because back when Homebrew was new (and a lot less opinionated) it was much faster than MacPorts, especially with the bottles (binary packages) feature. Today, MacPorts has binary packages, doesn't randomly force incredibly slow updates when I just want to quickly install something or run a package search, has entirely opt-in telemetry through installing a package (mpstats) and still lets me customise packages (through the variants system, which is more powerful than the with --with-feature system Homebrew seems to have abandoned). The only pain point I've found is upgrading to new macOS releases, though I've often found just reinstalling MacPorts itself will get me going again in a pinch without having to take inventory of my installed ports and reinstall everything from scratch.
- kergonath 5y ago> I've personally had very good experiences switching back from Homebrew to MacPorts. Wouldn't go back to Homebrew. I have been much happier with Macports than with Homebrew (which I try every other year to see if it’s improved). > The only pain point I've found is upgrading to new macOS releases, though I've often found just reinstalling MacPorts itself will get me going again in a pinch without having to take inventory of my installed ports and reinstall everything from scratch. I used to use the commands suggested on the Macports website (save the list of installed packages to a file; update OS; install Macports; re-install ports). But since a couple of upgrades I have decided to use this as an opportunity to get rid of ports I don’t actually need.
- dehrmann 5y agoI also switched back after one too many issues with brew file ownership and permissions.
- SavantIdiot 5y agoMacports made my life hard three times I upgraded OSes from having to migrate Macports versions, just leaving broken files in /usr/local/*. The worst instance was Mavericks, when it suddenly said i had no ports, after 10 years on the same image. It did something similar during the Monterey update. I'm now 100% brew but still have broken artefacts from MacPorts littering my system. I'm also still using the same image from 2012, moved to new machines with TimeMachine, so that could be it, but I'm damned stubborn.
- st3fan 5y ago> At this point I should know better than to install postgres via homebrew. No. At this point you should know better and read the documentation. Whatever you switch to next, you are going to have similar issues and surprises.
- Doctor_Fegg 5y agoI've had big Postgres issues with Homebrew. I've never had "similar issues and surprises" with Postgres.app.
- st3fan 5y agoPostgres.app is not a package manager. If you pin Postgres in brew, not installing `postgres` but instead `postgres@11.3` instead, then you won't have any auto upgrade issues. You can then upgrade on your own schedule. Brew will keep Postgres at your selected version.
- ilaksh 5y agoLinux on a normal laptop or computer.
- civilized 5y agoA lot of the usual "it's bad" "it's not bad for me" discourse in these threads. Could people raise the bar a bit and talk about specific problems they have had with homebrew - other than the auto-update, which we've already noted can be changed by setting HOMEBREW_NO_AUTO_UPDATE=1? Thanks.
- ratww 5y agoIt's hard to pinpoint what the problem really is, but me and a few colleagues had corrupted brew installations lately, where various things would just randomly stop working after updating a single package. The trick of disabling auto updates doesn't really work when you do want things to be updated. Sometimes there are conflicts and the usual path was to upgrade everything. Not that it matters: it seems that the usual "upgrade everything" from 2 years ago has changed into "delete every folder and reinstall everything from scratch". Also, a few years ago, updating everything or reinstalling lots of things from scratch was fast. Now, it requires much more time due to the massive number of dependencies every single package has. Also, the maintainers have a super weird aversion to everything that is "too simple". I've seen packages rejected because "the build process was too simple and there are no dependencies". The excuse was that "users can build it themselves". This is not for silly stuff random people wrote on weekend, this is for 20 year old tools used in production written in C. I can't say for certain why or how it got worse for other people, but for me it started when they doubled down on dynamic linking. That's why installing takes 5x the time it used to, takes more disk space, breaks all the time and makes organising your tools a fucking mess. As for me: I've replaced most of my Brew usage with Docker (for most development tools) or with static binaries compiled weekly using Github Actions (for cli tools like youtube-dl, etc). I'm also using download links straight from language websites (Rust, Ruby, Python, DotNet, Haskell).
- pxc 5y ago> Also, the maintainers have a super weird aversion to everything that is "too simple". I've seen packages rejected because "the build process was too simple and there are no dependencies". The excuse was that "users can build it themselves". This is not for silly stuff random people wrote on weekend, this is for 20 year old tools used in production written in C. wtf? What could be the possible motivation for this? Is their build farm really straining or something? Can you point me to this example? > I'm also using download links straight from language websites (Rust, Ruby, Python, DotNet, Haskell). this sounds downright medieval to me, like why even use macOS for development if the software management tools are so bad that that's what you're doing
- pjmlp 5y agoNone, I just use the UNIX experience provided by macOS.
- Thristle 5y agoIn the past i used brew to install EVERYTHING, this lead to situations like in OP of DBs, compilers, interpreters and other things that i wished stay frozen to get updated by surprise Since then i moved to manage everything that needs to stay frozen by either a versioned formula/cask (python@3.9 and so on) or use brew to install a version manager (asdf,pyenv,pipx) and then use that. Results are much better once I did that Although versioned casks/formula exists you will still get minor versions - python@3.9 will update from 3.9.0 to 3.9.1 is that ever exists. so while completely protecting you from upgrades it does minimize the the risk Also, there is really no need to install virtualenv directly from brew. A very bad practice. Of course doesn't change the fact that brew did things that are unrelated to what you asked of it
- sswastioyono18 5y agoI'm surprised people still use postgresql from homebrew. Like honestly, I use brew for any CLI command only like zsh and git. Well maybe some programming language as well but I would never, ever install database with it unless I'm desperate. Anything that can be dockerized, just use docker.
- ratww 5y agoPostgres from Homebrew used to work extremely well. It was faster and more reliable than Docker, not to mention lighter on your machine. Now, it's unusable.
- latortuga 5y agoI use and love Postgres.app on macOS, separate instances of lots of versions of postgres at the click of a button.
- rrock 5y agoYou’re right. Some of us only realized our mistake when it was too late.
- physicsguy 5y agoIf you've only got a Mac with 256gb of storage, then throwing away ~100gb on containers is a nightmare
- smoldesu 5y ago...because your other 156 gigs are being eaten up by Xcode. Seriously, why the hell does Apple even sell 256gb laptops these days?
- physicsguy 5y agoFor me it's just my personal one I've had for a few years, I couldn't really afford to spend more when I bought it as I was a student. I think the new MBPs start at 512gb now
- 5y ago
- peterhil 5y agoI have moved to Nix on two of my three machines – the two laptops have Archlinux32 and MacOS Mojave. I should replace Homebrew installed packages with Nix packages on my desktop iMac too, but in the mean time I have used Macports and some Nix packages for installing new packages.
- peterhil 5y agoI could not get Postgres installed through NixDarwin, so I installed with Postgres.app for MacOS. With it you can easily manage Postgres versions.
- ljm 5y agoI switched to Macports back in my Mac days, used it as my daily driver for about 18 months before moving to Linux. Macports has this appearance of being 'dated', and not the cool kid compared to Homebrew. But it doesn't have an opinion on what version of software you can install. Want postgres 9.4? Go ahead and install it. Want some ancient version of some other library? That's fine. Dealing with custom port files and repositories isn't quite as easy, I suppose, but that's not really much different to setting up a debian repo in that it's a use case you won't encounter nearly as often as just installing stuff. I also used nixpkgs at one point, many moons ago. That was also nice but not the most practical on a Macbook with 128GB storage, when you also have Docker, npm/ruby dependencies, and your native Mac software in the mix.
- isitdopamine 5y agoI switched to MacPorts and never looked back, about two years ago. So far a much better experience than Homebrew.
- deleted 5y ago[deleted]
- danaris 5y agoI've been using MacPorts for over a decade now, and I'm very happy with it. I certainly much prefer its default choice of install prefixes (/usr/local should be reserved for things I install manually; /opt/local doesn't clash with anything else I'm aware of).
- whalesalad 5y agoIt’s a strategy. Package managers have to choose a strategy: slow, crusty and stable or bleeding edge? It’s not CentOS… it’s a local dev machine. The same scenario will occur on Arch Linux. Fortunately Homebrew has lots of helper scripts to upgrade DB’s like Postgres. You probably saw some scroll back with a command to upgrade from 12 to 13 or 13-14 etc. It will even download and install an old version in order to upgrade safely. I understand the frustration but what is the alternative? Pinning every dependency? The reason so many of your packages were updated was likely because a core dependency was upgraded like OpenSSL.
- ryandrake 5y agoIt would be nice if you could run Homebrew in a mode where dependencies were statically linked if possible. On my system, "brew list | wc" shows 200 installed packages, and "brew leaves | wc" shows that I actually only intended to install 32 of them. This is a huge dependency tree full of junk I don't even know if I actually need. Static linking would save a lot of space and make your list of installed packages simpler and more understandable.
- kbutler 5y agoIn my experience, developing software on a local dev machine is precisely when fine-grained control of software stack versions is needed. This can be encapsulated with things like docker, but the "I'll globally, arbitrarily update everything to the bleeding edge" strategy isn't friendly for building and maintaining software.
- whalesalad 5y agoThat capability exists: brew install postgres@12
- miohtama 5y agoNowadays virtualenv is built into Python and you rarely need to install it. Try: python -m venv
- lasershark789 5y agoReally you should switch to debian if you want stable packages. It's not for the latest hotness but it achieves the stability it advertises.
- wg0 5y agoThere are some tips which others might already have alluded to: 1. Python has built in virtual environment support. python -m venv should do the trick. 2. Use docker for running Postgres, MySQL etc with some directory mounted for data.
- whinvik 5y agoI have tried macports, spack and to a limited extent homebrew. But the package manager that seems to work best for me is actually Anaconda, which is very surprising.
- pxc 5y agoMacPorts and Nix are fine to use alongside each other. I recommend using Nix alongside a couple other systems so you have escape hatches. - Nix - pkgsrc or MacPorts ‘just in case’ they're more convenient for some package for any reason - Homebrew, exclusively to use for Casks (which are really a separate system from the rest of Homebrew) To get the most out of Nix, you'll need to take some time to really learn it. For managing services like postgres, it's nicest to use Nix-Darwin (a module system for managing services and programs, including automatic startup via LaunchD) but if you want to always keep the same Postgres with Nix-Darwin, you'll have to learn how to pin packages. If you use Nix with Flakes, it'll feel a lot faster (much faster than Homebrew). If you use old-school Nix, it'll be slow if you call some deprecated commands.
- forinti 5y agoIt is really simple to compile Postgres from source and it only takes a few minutes. You can have multiple versions running on a single machine and installed in your preferred directory. If you forget to include the extensions, you can add them all later.
- handrous 5y agoBrew's package selection is unmatched and it works great for a particular purpose. Keep using it, but stop using your dev machine's system package manager to manage project dependencies. There are a bunch of good reasons not to do that, anyway. For server stuff, probably use Docker. Brew is for your tools you personally use, that you mostly want to be at latest. If a project needs, say, a compiler and library at a specific version, define that in the project and use something that will manage that for you, which will typically be language-specific—damn near every language has an "Xvm" now, where X is the first letter of the language or platform, or else something equivalent, right? That's not to cater to Mac with Brew, it's because that's a very good idea on any platform. You shouldn't use the system package manager on Ubuntu or Red Hat or whatever the way you're using Brew, either, unless you're exactly matched to your deployment target—same distro, same version, and you don't upgrade locally unless the servers are getting upgraded—and are scripting your local package installations and upgrades with the same script you use to deploy on the server.
- apostacy 5y agoBrew used to be much more useful to me. Using brew years ago, it was way less opinionated and more flexible, which was perfect for OSX. Homebrew's response to criticism seems to be to continually narrow the field of users and the scope of their project, and tell users to use something else. People are only frustrated because they found it to be so helpful. But I suppose that it had to mature, or something like that.
- Mister_Snuggles 5y agoMy experience with MacPorts has been generally good, apart from dealing with OS upgrades which are more painful than necessary, but I've honestly never tried Homebrew so I can't compare them directly. Personally, I find that the whole Homebrew "theme" where every command/thing is named after something alcohol/brewing-related (cask, bottle, formulae, tap, keg, etc) is a huge turnoff.
- devilduck 5y agoUser error. You should have known about pinning versions. If this is the reason you want to change package managers, you should consider this. Either that or maybe macOS isn't the OS for you. Try gentoo.
- mikemcquaid 5y agoHomebrew project leader here: I hope you're able to find a package manager that better fits your needs and I'm sorry that Homebrew is not currently doing so. --- Homebrew upgrades dependencies and dependents of those dependencies (which, admittedly, can feel like unrelated) on installation and upgrade. As mentioned in other comments, you can customise this behaviour with `HOMEBREW_NO_INSTALL_UPGRADE` or `HOMEBREW_NO_AUTO_UPDATE`. Homebrew does this because the alternative is sometimes breaking things. An example: - you want to install `virtualenv` that depends on `python@3.10` - the binary package for `virtualenv` you want requires the newest `python@3.10` - this upgrades `python@3.10` on installation Now, Homebrew has a choice. Either we upgrade _everything_ that depends on `python@3.10` that you have installed or we knowingly break some of the things you have installed that depend on `python@3.10`. We choose the safer option by default. The more time left between updating/upgrading, the more likely to have more dependencies updated which requires more dependents to be updated. --- Regardless, I appreciate this is a problem and we're still figuring out potential solutions for this problem. A reminder that we're a volunteer run project so it's not always as easy as we'd like it to be to get these changes out quickly.
- taylodl 5y agoFor the record I love Homebrew. I even use Homebrew to install regular applications whenever possible because I love how easy it is to update them. I appreciate the complexities of dependency management and yes, it sucked a bit when I installed postgresql. That isn't a problem with Homebrew though, that's just the nature of the beast. Anyway, I just wanted to say you guys are doing a great job!
- mikemcquaid 5y agoI've opened https://github.com/Homebrew/brew/pull/12413 https://github.com/Homebrew/brew/pull/12413 to improve the discoverability and documentation for all this stuff.
- dcchambers 5y agoMike - just wanted to say thanks for all you (and the other Homebrew volunteers) do! My mac dev experience is 100x better with Homebrew - it's literally the first thing I install when I get a new machine. Perhaps in situations like this Homebrew could alert the user "Hey, this package hasn't been updated in a while and 40 other packages depend on it so this is going to take a while. Press enter to confirm or cancel and use an alternative method (HOMEBREW_NO_INSTALL_UPGRADE) to just upgrade the one package. Caveat - this may break things."
- swiley 5y agoYou can install Gentoo in a prefix on OSX. I used to do that.
- dekhn 5y agoI gave up on brew and other package systems like it a long time ago. I found it far, far easier to install Ubuntu 20.04 and use that as a utility machine. Even on a system like that, many times when I interact with package managers like conda, it ends up compiling some huge package from scratch. I consider that a failure.
- trillic 5y agopacman
- bpiche 5y agoPacman is unparalleled but its bleeding edge approach to updates would cause the same issues here unless you specified a version number when you're installing or something
- mmargerum 5y agoWhy Ruby tho?
- rswail 5y agoWhen I first started using Macs 5 years ago, I explored both macports and homebrew. As soon as I saw how homebrew screwed around with root, and how it installed itself in /usr/local and required strange machinations I looked more at Macports. Ports have a long history from the BSD Unices and Macports keeps that ethos. It installs neatly in /opt and doesn't screw around with MacOS except in the approved ways (eg for Java and Python frameworks). I still use Macports and it's had everything I've needed and when I hit bugs during the Big Sur beta, they were fixed quickly and directly, while still complying with Apple's beta policies. I've dabbled with Nix, but it's a bit too* prescriptive for me.
- johnboiles 5y agoI use brew for system cli tools (eg wget, ffmpeg) and Docker when I need a consistent environment (eg to match what I run in production)
- physicsguy 5y agoI'm surprised I've not seen Spack mentioned here. Spack especially is great for home installs. It's aimed mostly at HPC cluster users, who by default need multiple versions of compiler toolchains, programming languages, libraries, but works well on Mac too. I hate it, but Anaconda might work too, so long as it's not a corporate laptop where you need a license.
- deleted 5y ago[deleted]
- kristjansson 5y agoI never understand these complaints about homebrew. Of course, that's because I set export HOMEBREW_NO_AUTO_UPDATE=1 in my zshnev so long ago that I forgot about it, and just enjoyed a great product from a great community. Is it a bad default? Sure, probably, spooky-action-at-a-distance is not great. But it's just a default, if you don't like it, change it, one line of shell config is simpler switching distros.
- ccanassa 5y agoI am Python dev and I never heard of someone using brew to install virtualenv before. I think that you are using brew for the wrong purposes, I suggest the following instead: - Python already includes the venv module, you don't need to install anything, just run `python -m venv <venv_dir>` - You should manage multiple versions with pyenv instead of brew. Pyenv can be installed with brew.
- ConanRus 5y agoFirst of all, don't install Python packages with OS package manager, period. Never do that. Use "pip install" instead. Second,Python ecosystem/tooling is a mess, so isolate it if possible. One way to do it is Conda https://docs.conda.io/en/latest/ https://docs.conda.io/en/latest/ I understand that's not always possible as a shitload of soft has now Python as a dependency, but still. And the last. One package manager seems to be missed in the discussion is PKGIN/PKGSRC https://pkgsrc.joyent.com/install-on-osx/ https://pkgsrc.joyent.com/install-on-osx/ It is the native package manager on SmartOS/illumos/OpenIndiana/OpenSolaris, NetBSD, and Minix. It is stable and fast. I doubt you get your GUI soft there tho.
- hv42 5y agoI would suggest to not use brew for anything that depends on python, ruby etc. Most of the time you can use e.g. asdf to manage all your dev dependencies. Also, most softwares allow you to install them without hombrew. (e. g. https://postgresapp.com/ https://postgresapp.com/ for postgres). I have seen so many installations screwed up because hombrew upgraded some packages without requiring a confirmation from the user. It's a bit unfortunate given that so many packages are on hombrew.
- alexellisuk 5y agoI built a feature in arkade [1] to pull in binaries for CLIs for infrastructure and developer tooling that I wanted to use - it now has 72 CLIs that you can pull down with a single command and most importantly, as near to instantly as you're going to get. For instance: arkade get kubectl@v1.22.1 yq helm faas-cli It's not got anywhere near the catalog of brew, and doesn't compile software, or help you find lib-xyz for your Yubikey, but it is really fast and has a growing community behind it. It works on MacOS, Linux, Windows and arm hosts to determine the correct download URL and pull in a binary. [1] https://github.com/alexellis/arkade https://github.com/alexellis/arkade Contributions are welcome.
- baggiponte 5y ago100% unrelated but I would suggest installing `pipx` when you need python packages to use from the CLI/outside a python project environment. `pipx` installs each package in its own virtualenv, so it is independent of your system python.
- schainks 5y agoIMO packages like virtualenv should be brought in by a local python that's installed, not brew.
- lma21 5y agoThe same thing happened to me when I upgraded vim ! I thought why the heck would postgres requires an upgrade if I was upgrading vim's minor version ! It took ages... EDIT: for me this is a minor issue. i'll continue using `brew` as it does the job quite well
- n8henrie 5y agoCame here hoping to see some recommendations on getting started with nix on MacOS, or maybe a favorite blog post or series. I've tried the nix.dev installation + nix-darwin instructions 4 or 5 times but never make it very far. Seems like I should generally prefer a multi-user install? Does nix-darwin play well with that? As I supposed to `sudo -i nix-channel --add / update` or not use sudo? Is unstable the generally recommended channel? Do I use sudo with nix-darwin, since it's supposed to be kind of like NixOS / system-wide? And then I usually give up, count my blessings for homebrew, and resolve to never again waste another 2 days trying to figure out nix. Rinse and repeat in 1 month.
- rgoulter 5y ago> Seems like I should generally prefer a multi-user install? Does nix-darwin play well with that? On my macOS computer, I don't have a multi-user install. Never had issues with it (but I also only just use one user account for everything). Just tried running the nix-darwin installer, and it sets up some extra users as part of that anyway. > Am I supposed to `sudo -i nix-channel --add / update` or not use sudo? Is unstable the generally recommended channel? Do I use sudo with nix-darwin, since it's supposed to be kind of like NixOS / system-wide? Once you've got nix installed, in general you don't want to "sudo nix ...". Unstable is fine; but if things break, it's easy to rollback changes with Nix, so that you can use the versions which worked. There's no need to start out with wrangling with nix-darwin. Just starting out with "nix-env --install --attr nixpkgs.<whatever>" will be closest to how homebrew is used.
- cutler 5y agoMacports has served me well for the last 18 years.
- grzm 5y agoI'm moving to nix. I use a combination of macports and brew, and brew's current behavior is unusable for me, so it's going to be relegated to "use brew for package X until I find an alternate solution for package X". I don't want to have to keep updating brew just to keep from having to wait ever-increasing amounts of time when I want to install a new package or upgrade a specific one. I never have these issues with macports, and won't have them with nix.
- dev_tty01 5y agoHomebrew is a great system for most situations. Great effort by an amazing group of volunteers. To fix the very real issue you describe, I would like to see a --isolate option for mission critical packages. All the dependencies would be contained in a separate, package specific directory within /opt or /local. The rest of the dependency management could happen without affecting the isolated package.
- pauljonas 5y agoBefore I used homebrew, I was a MacPorts user and that was a terrible experience for me. Been running with homebrew for at least a decade since, and I cannot recall any negative encounter other than the hassle of grabbing xcode command line tools when I upgrade a major version of Mac OS, which is a minor detail. I get the appeal of MacPorts & a dedicated separate package path but it caused all sorts of problems for me v. the integrated approach of homebrew. O there was another negative now I remember -- had to uninstall brew version of MacVim & install manually. But that not a big issue either & typically, all of the brew packages are CLI only for me.
- LargoLasskhyfv 5y agoMaybe [1] https://pkgsrc.org/ https://pkgsrc.org/ ? Check [2] https://pkgsrc.se/ https://pkgsrc.se/ before, to see if the availability and the 'freshness' of packages fits your needs. edit: [3] http://pkgsrc.joyent.com/install-on-osx/ http://pkgsrc.joyent.com/install-on-osx/ if you don't want to compile and have binaries instead.
- jerrysievert 5y agoI've found that `brew pin` is becoming a necessity for things not breaking on my machines. after Postgres breakage that cost me a half day of work, and fish breakage that cost me a bunch of personal time, I try to pin things that have the high probability of breaking due to an update. not optimal, but sadly necessary.
- musicale 5y agoGiven that macOS is a BSD variant, and given Apple's billions, it's a bit disappointing that Apple doesn't directly support (both engineering wise and financially) a BSD package manager.
- deleted 5y ago[deleted]
- password4321 5y agoAsdf is the bees knees for dev tools. https://asdf-vm.com https://asdf-vm.com
- senorsmile 5y agoAsdf is 1000! Use it on Linux and once in WSL.
- mekster 5y agoYou're doing it wrong. Use Homebrew only for tools and not for critical services like databases and use a cloud server or local virtualization like VMware Fusion (which is free these days for personal use) to run services because major distro packages have far more eyes to check for stability issues. I never understand people trying to run every parts of the development environment through a local machine's third party package managers which would forbid anyone else being able to check your work right then as you're only running it as localhost, not to mention the power can be down at any moment you're not using your machine and you can't even switch machine yourself to work from easily. And then when deploying, you'll be running it on Linux anyway which would likely bring little consistency issues. Do yourself a favor, either spend $5/mo for a cloud Linux and run your stuff remotely or run a locally virtualized Linux and stop using third party package managers no one is using to run on production. And you can happily keep Homebrew and also install Homebrew on Linux to have unified tool sets on your Mac and Linux CLI tools.
- vermaden 5y agoWhy not check FreeBSD? Here are some arguments why it may be worth it this time :) https://vermaden.wordpress.com/2020/09/07/quare-freebsd/ https://vermaden.wordpress.com/2020/09/07/quare-freebsd/
- KolenCh 5y agoMy current solutions mainly relies on homebrew + Macports + conda. Macports primarily for system level dep. use this whenever packages available. Fall back to homebrew when not available on Macports. This includes brew cask which is unique. This dual setup may requires you to carefully separating the 2 when installing and updating. I do this by installing brew in custom location (not /use/local) which is now the default on ARM. Also some shell functions that selectively control the environment (essentially I use an environment that only sees port to update port, vice versa.) Lastly, conda for dev environments, mostly for Python stack. But it is also useful for other stuffs (conda is a cross platform package manager and in this sense it is similar to brew which also support Linux.) Obviously selections is not as broad comparing to brew. On computing facilities, I used to use linuxbrew to install some “system” dependencies that’s missing, including zsh, mosh, tmux, tree, etc. But obviously I cannot install in the recommended path by brew, which means compiles from source. And it is not robust (and they also say this is not a supported pattern.) I now use conda for this and is very robust (conda uses a hack to install precompiled binaries to arbitrary prefix.)