Cygwin包中是否有类似于Debian上的apt-get
或redhat上的yum
允许我从命令行安装组件的工具?
答案 0 :(得分:129)
对于更方便的安装程序,您可能需要使用
apt-cyg
作为您的包管理员。它的语法类似于
apt-get
,这是一个加号。为此,请按照上述步骤操作
步骤,然后使用Cygwin Bash执行以下步骤
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin
现在安装了apt-cyg
。这里有几个例子
安装一些软件包
apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
答案 1 :(得分:122)
Cygwin的设置接受command-line arguments从命令行安装软件包。
e.g。 setup-x86.exe -q -P packagename1,packagename2
在没有任何GUI交互的情况下安装软件包('无人参与安装模式')。
(请注意,您需要根据需要使用setup-x86.exe
或setup-x86_64.exe
。)
有关包列表,请参阅http://cygwin.com/packages/。
答案 2 :(得分:95)
“setup.exe”安装程序中没有专门提供的工具 apt-get的功能。但是,有一个命令行程序包安装程序 对于可以单独下载的Cygwin,但它并不完全稳定 依赖于变通方法。
apt-cyg:http://github.com/transcode-open/apt-cyg
查看项目的“问题”选项卡以查看已知问题。
答案 3 :(得分:46)
存在一些脚本,可以用作Cygwin的简单包管理器。但重要的是要知道,他们总是非常<强>有限,因为......呃...... Windows。
安装或删除软件包很好,Cygwin的每个软件包管理器都可以做到这一点。但更新很痛苦,因为Windows不允许您覆盖当前正在运行的可执行文件。所以你无法更新,例如Cygwin DLL或任何包含Cygwin本身当前运行的可执行文件的包。 Cygwin Installation页面上还有此注释:
“没有更全功能的包管理器的基本原因是 这样的程序需要完全访问Cygwin的所有POSIX功能。 然而,这很难在无Cygwin的环境中提供,例如 在第一次安装时存在。此外,Windows不容易允许 覆盖使用中的可执行文件,以便安装新版本的Cygwin 包管理器使用DLL时DLL是有问题的。“
Cygwin的设置使用Windows注册表来覆盖正在使用的可执行文件
并且此方法需要重新启动Windows 。因此,关闭会更好
更新软件包之前的所有Cygwin进程,因此您不必重新启动
您的计算机实际应用更改。安装新包装
应该完全没有任何麻烦。我不认为任何包经理
除了Cygwin的setup.exe
实现了覆盖正在使用的文件的任何方法,
所以如果它不能覆盖它们就会失败。
更新:由于版权问题(DMCA takedown),存储库最近被禁用。它looks like存储库的所有者在他自己的存储库上发布了DMCA删除,并创建了一个名为 Sage 的新项目(见下文)。
对我来说最好的一个。仅仅因为它是最近的一个。它不使用Cygwin的setup.exe
,而是重新实现setup.exe
所做的。它适用于两个平台 - x86 以及 x86_64 。有很多叉子具有或多或少的附加功能。例如, kou1okada fork是改进版本之一,这真的很棒。
apt-cyg 只是一个shell脚本,没有安装。只需下载它(或克隆存储库),使其可执行并将其复制到PATH:
chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim
还有bunch of forks具有不同的功能。
另一个作为shell脚本实现的包管理器。我没试过,但实际上看起来不错。
它可以搜索存储库中的包,列出类别中的包,检查依赖项,列出包文件等。它具有其他包管理员没有的功能。
已弃用原始cyg-apt的分叉,带有改进和错误修正。它有很多功能,并在Python中实现。使用make
进行安装。
如果你使用Chocolatey来安装Cygwin,你可以安装包 cyg-get ,这实际上是围绕用PowerShell编写的Cygwin setup.exe
的简单包装。
它还有一个command line mode。此外,它允许您一次升级所有已安装的软件包(如基于Debian的Linux上的apt-get upgrade
)。
使用示例:
setup-x86_64.exe -q --packages=bash,vim
您可以创建别名以便于使用,例如:
alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"
然后,您可以使用以下命令安装 Vim 包
cyg-get vim
答案 4 :(得分:4)
老问题,但仍然相关。这是今天(2016年6月26日)对我有用的。
来自bash shell:
t
答案 5 :(得分:4)
首先,从以下位置下载安装程序:https://cygwin.com/setup-x86_64.exe(Windows 64位),然后:
# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/
# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases
# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile
例如
# install vim
cygwin vim
# see other options
cygwin --help
答案 6 :(得分:3)
我想要一个类似于apt-get --print-uris
的解决方案,但不幸的是apt-cyg没有做到这一点。以下是一个解决方案,允许我只下载我需要的软件包及其依赖项,并将它们复制到目标进行安装。这是一个bash脚本,它将apt-cyg
的输出解析为URI列表:
#!/usr/bin/bash
package=$1
depends=$( \
apt-cyg depends $package \
| perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
| sort \
| uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
if ! grep -q "^$curpkg " /etc/setup/installed.db; then
apt-cyg show $curpkg \
| perl -ne '
if ($x = /install: ([^\s]+)/) {
print "$1\n";
}
if (/\[prev\]/) {
exit;
}'
fi
done
以上将打印出相对于cygwin镜像根需要下载的软件包的路径,省略已安装的任何软件包。要下载它们,我将输出写入文件cygwin-packages-list
,然后使用wget:
mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris
然后可以使用安装程序从本地缓存目录进行安装。请注意,要实现此功能,我需要将setup.ini
从之前的cygwin软件包缓存复制到包含下载文件的目录(否则安装程序不知道是什么)。
答案 7 :(得分:3)
Dawid Ferenczy的答案非常完整,但在我尝试了几乎所有选项后,我发现Chocolatey’s cyg-get是最好的(至少是我唯一可以上班的人)。
我想安装wget
,步骤如下:
choco install cyg-get
然后:
cyg-get wget
答案 8 :(得分:1)
通常在安装包之前,必须知道它的确切名称:
# define a string to search
export to_srch=perl
# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'
# and install
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"