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

= December 22 =

Linux apt vs. github /pip installation
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 '

How are these lines different from:

apt-get install youtube-dl

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


 * 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)
 * 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  . I suspect   in your shell is just an alias or shell function that stands for that, put there by your system distributor. To find out, give   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)


 * Hmm, I'd hope that rather more than a vague understanding is normal for a Linux user, but we'll let that pass.  is on the right lines, the commands that  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)


 * 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)
 * 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  into the new directory immediately after , 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)