Answers:
我会这样:
apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download
然后,您可以将其安装dpkg -i *.deb
在下载这些文件的目录中。
apt-cache depends -i
将检查PACKAGE的重要依存关系。仅当apt-get download PACKAGE
成功从添加到的ppa存储库中找到PACKAGE时,才会执行该操作/etc/apt/sources.list
。现在,apt-cache depends -i PACKAGE
具有form的输出Depends: dependency-name
。我们只需要依赖项的名称,这就是awk所做的-它仅获取第二个字符串。例如,尝试做apt-cache depends -i vim | awk '{print $2}'
。另请注意,&&右边的整行都可以视为一个陈述
dpkg -i *.deb
不太好,它不会按依赖关系顺序安装软件包。因此,您可能需要重试几次才能安装所有软件包。无论如何要解决?
这是一次性的事情,还是您想不断更新的事情?您是否主要在网上工作,并且只想对所有软件包进行本地备份,以防万一?
您可以安装充当APT代理/缓存的几种服务。您将APT指向本地缓存,它将从Internet下载,并保留所有软件包的本地缓存副本。如果您的网络上有很多计算机且选择了相同的软件包,这将非常有用。
我偏爱的apt缓存大约是,但是还有apt-cacher-ng和其他一些。每种缓存在配置方式上都有细微的差别。
我总是使用最小的netinst安装程序来构建基于Debian的系统,这意味着我的apt缓存通常具有几乎所有软件包来完全构建我的系统。
运行以下python程序:
import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
print(t.stdout)
exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
one_choice_made=False
for needed_package in choices.split(b"\n"):
needed_package=needed_package.strip(b"\n ")
t=subprocess.run(["apt-get", "download", needed_package])
if t.stderr or t.returncode:
print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
else:
one_choice_made = True
#print("downloaded",vajalik_pakk)
break
if not one_choice_made:
print("could not get one of dependecies", choices)
运行以下python3程序:
import subprocess
olemas_olevad_pakid=set()
def r(pakk):
t=subprocess.run(["apt-get", "download", pakk])
if t.stderr or t.returncode:
#print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
return False
olemas_olevad_pakid.add(pakk)
t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
print(t.stdout)
exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")[1:]
#print(pakk, "needs packages:", needed_pacages)
for choices in needed_pacages:
one_choice_made=False
for needed_package in choices.split(b"\n"):
needed_package=needed_package.strip(b"\n ")
if needed_package in olemas_olevad_pakid or r(needed_package):
one_choice_made=True
break
if not one_choice_made:
print("PROBLEM: could not download any of", choices)
return False
return True
#for pakk in packages_to_download:
# print("pakk:",pakk)
# r(pakk)
r(input("package name:"))
它将下载所有依赖关系中的所有依赖关系,而不仅仅是直接依赖关系。但是安装dpkg -i *.deb
失败。可能是因为apt-cache depends -i package
提供了错误信息或某些some.deb文件仍需要Internet连接才能安装。