mirror of
https://github.com/jordansissel/fpm
synced 2025-04-29 14:58:00 +02:00
Run pip
without the --build
flag
Previously, fpm would use `pip download ... --build ...` to instruct pip to unpack a given python package to a specific directory for the purpose of running something like `python setup.py` from it. However, somewhere in 2021, pip removed this flag. First, I think, it was deprecated and ignored, then finally removed. One reference to this removal in the upstream pip project is this issue: https://github.com/pypa/pip/issues/8333 Without `--build`, pip will place a single tarball in the destination directory. Fpm cannot easily predict the name of this file because we don't know the "real" name of the python package nor do we know the version number being downloaded. For example: ``` % python3 -m pip download --no-binary :all: --no-deps --no-clean django ... Successfully downloaded django % ls Django-4.0.4.tar.gz ``` Best guess: * we can expect exactly one file in the previously-empty target directory * we can also expect that it is a .tar.gz I don't know if these guesses are always correct, but it's a start. As of this commit, the following command generates a Debian package: `fpm -s python --python-bin python3 -t deb django` Prior to this commit, with a newer version of pip, the command would fail. Fixes #1831
This commit is contained in:
parent
82284c7a4b
commit
7f4718f9c2
@ -162,13 +162,22 @@ class FPM::Package::Python < FPM::Package
|
||||
]
|
||||
end
|
||||
|
||||
setup_cmd += [
|
||||
"--build",
|
||||
target,
|
||||
want_pkg,
|
||||
]
|
||||
|
||||
setup_cmd << want_pkg
|
||||
|
||||
safesystem(*setup_cmd)
|
||||
|
||||
# Pip removed the --build flag sometime in 2021, it seems: https://github.com/pypa/pip/issues/8333
|
||||
# A workaround for pip removing the `--build` flag. Previously, `pip download --build ...` would leave
|
||||
# behind a directory with the Python package extracted and ready to be used.
|
||||
# For example, `pip download ... Django` puts `Django-4.0.4.tar.tz` into the build_path directory.
|
||||
# If we expect `pip` to leave an unknown-named file in the `build_path` directory, let's check for
|
||||
# a single file and unpack it. I don't know if it will /always/ be a .tar.gz though.
|
||||
files = ::Dir.glob(File.join(build_path, "*.tar.gz"))
|
||||
if files.length != 1
|
||||
raise "Unexpected directory layout after `pip download ...`. This might be an fpm bug? The directory is #{build_path}"
|
||||
end
|
||||
|
||||
safesystem("tar", "-zxf", files[0], "-C", target)
|
||||
else
|
||||
# no pip, use easy_install
|
||||
logger.debug("no pip, defaulting to easy_install", :easy_install => attributes[:python_easyinstall])
|
||||
|
Loading…
Reference in New Issue
Block a user