Wikipedia:Reference desk/Archives/Computing/2021 December 22

Computing desk
< December 21 << Nov | December | Jan >> December 23 >
Welcome to the Wikipedia Computing Reference Desk Archives
The page you are currently viewing is a transcluded archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.


December 22 edit

Linux apt vs. github /pip installation edit

Can someone explain to me (Linux noob) what this lines of code do:

mkdir youtube-dl
git clone --depth 1 --branch fix-function-sig-parser https://github.com/lanegramling/youtube-dl.git 
cd youtube-dl 
python3 -m pip install -e . --user

I understand 1 and 3, and I see that 2 gets the app from github. I just don't know why it has to be this combination of commands. Regarding pip, I have only seen 'pip install <package name>'

How are these lines different from:

apt-get install youtube-dl

--Bumptump (talk) 23:33, 22 December 2021 (UTC)[reply]

I too have only a vague understanding of what I'm doing with Linux (which is perhaps normal for a Linux user?) but I know how to type -h, and using that skill I can piece together the last line. In reverse order, then, --user means "install to the user projects directory on this machine", "." means "install from this directory we're currently in", "-e" means "editable" and is used in connection with github projects and similar so that you can mess around with them after installing. Then python3 -m is invoking a module "as a script"; so it's running pip through python, for some reason. I would have thought this line would do the same thing without the "python3 -m" part, but if I had to guess I'd say this is a kind of failsafe in case pip isn't installed (I don't know if I'm even making sense here). In summary, I think this is a kind of developers' install method for those who want to play around with the code later. I see a similar method given among the many install methods on your github link (but not this one, so I wonder where these lines come from).  Card Zero  (talk) 01:31, 23 December 2021 (UTC)[reply]
Git is told to clone the given branch of the repository at the given URL to your system. (This means copy it, including setting up the "Git stuff" that lets you manipulate it with Git locally.) Then Python is told to run pip, and pip is told to install the package contained in the current directory (. means "current directory"), as a "user install". See the pip documentation for details. Note that the official docs there instruct you to run pip with python -m pip. I suspect $ pip in your shell is just an alias or shell function that stands for that, put there by your system distributor. To find out, give type pip a whirl.
The apt-get command runs apt-get and tells it to install the "youtube-dl" package. To do that, apt-get fetches it from a package repository that your system is configured to use. You get whatever's in the repository. This might be an older version, or someone else's code branch. You'll have to look up what's in the repository to find out. Like basically all package managers, APT lets you configure it to use repositories other than the default. These may contain packages not available in those, "unstable"/"nightly" builds of software, and so on. You can also create your own custom packages to use locally. You could look for an alternative youtube-dl package someone has made to do what those commands are doing, or write your own and make it available. --47.155.96.47 (talk) 11:49, 23 December 2021 (UTC)[reply]

(edit conflict)::Hmm, I'd hope that rather more than a vague understanding is normal for a Linux user, but we'll let that pass. Card_Zero is on the right lines, the commands that Bumptump presented result in an editable python project in your home directory, owned by you the user. As well as exploring commands with -h you need to get used to going to the manual first. For instance man mkdir.

mkdir
Makes a new directory as I'm sure you are both aware.
git clone
Copies down (ie "clones") a project from the github. See man git and man git-clone for full details. --depth 1 just gets a single branch. --branch fix-function-sig-parser gets the branch called "fix-function-sig-parser" instead of the HEAD branch. Obviously https://github.com/lanegramling/youtube-dl.git is where to find this github.
cd youtube-dl
No comment!
python3
As Card_Zero worked out, this runs python3 using the module pip. The man page for this is at man pip3. Pip will install the result editable in the current directory (ie youtube-dl) as an ordinary user.
pip3 (on its own)
There is a short script /usr/bin/pip3 which invokes the python3 interpreter (via the Shebang (Unix) mechanism) to load in the pip module and run it. This is what happens if you just type pip3. Your system may have a link from /usr/bin/pip to /usr/bin/pip3 in which case you can just type "pip".
apt-get install youtube-dl
This command goes out to the configured repositories and installs the latest supported version of youtube-dl. The command will write to /usr/bin and other system directories, so needs to be run as root, either directly or via sudo.
I've guessed that you are using Debian. Please be sure in future to state which distribution and version you are using, they do vary somewhat in details. If you are not wanting to edit and play around with youtube-dl then I would seriously recommend just installing it from the repository. That way you'll get a stable, supported, version. If you do want to build it yourself, please bear in mind that you may need to rebuild after some upgrades and no-one will warn you! At least though, building it as a user you will only mess up your account not the system! All the best, Martin of Sheffield (talk) 12:19, 23 December 2021 (UTC)[reply]
These answer make sense. But wouldn't this:
git clone --depth 1 --branch fix-function-sig-parser https://github.com/lanegramling/youtube-dl.git 
python3 -m pip install -e ./youtube-dl --user

Accomplish the same. The git command creates a directory. BTW, in this case I got a recommendation to install this specific app in this way, since the app in the repository was buggy. And indeed this app didn't have the bug I was experiencing. Bumptump (talk) 00:48, 24 December 2021 (UTC)[reply]

If that works, it's not "wrong". But general best practice is to create a new directory to work in, in case some program will happily go ahead and dump a bunch of stuff into your current directory, possibly even overwriting files. Actually the true best practice would be to cd into the new directory immediately after mkdir, to ensure, like I said, that all your work is "happening" in its own directory. In this case, you'd wind up with another subdirectory inside that directory, since that's Git's behavior, but this is trivial. Directories don't "cost" anything, and it pays off the first time it prevents the hassle of cleaning up a mess some program dumped unexpectedly in a directory where you didn't want that to happen. --47.155.96.47 (talk) 02:08, 24 December 2021 (UTC)[reply]