用于安装软件包和执行命令的命令工具。

ido的Python项目详细描述


![CI](https://travis-ci.org/limodou/ido.svg?分支=主分支)



ido是一个用python编写的命令行工具,您可以使用它安装包或执行命令。它的作用就像啤酒,美味,美味,等等。
但是ido可以更容易地使用和扩展,以满足您的需要。


文件,但是文件扩展名应该是`.ido`
*可以从本地磁盘或网络中搜索安装脚本
*内置丰富的功能,并且可以轻松扩展
*包安装aim user home first
*依赖文件可以从磁盘中搜索
*用户可以自己创建工具基于IDO以满足其应用程序需要
*一些配置可以保存在设置中。py
*用python编写,应该支持2.6、2.7、3.3、3.4

nginx、redis等

它们是自动安装的。

ido目前支持python 2.6+。


您可以
尝试"ido install demo"查看演示包。

包索引链接,它可以是一个目录或一个url。
-e env_var定义变量并将传递给安装脚本。
-p前缀,--prefix=prefix
编译和安装源包时的前缀值。
-l log,--log=log log filename将在其中写入shell输出。
-f files,--files=files
源包存储目录。
-nocolor输出结果不带颜色。
-c配置,--config=config
配置文件。
```


`````
行)。

````
ido帮助视图


用法:ido view[options]package

view install.py of a package


options:
-i index,--index=index
package index link,它可以是目录或url。
-e editor,--editor=editor
编辑器用于打开包的install.py。
-d,--仅显示install.py内容,而不编辑它。
--不带颜色的任何颜色输出结果。
````

package>;`其中必须有一个名为'install.py'的文件。
或者只有一个名为`<;package>;.py'的python文件。
您完全可以用python编写脚本。

install.py'只是一个普通的python文件,但它将用'exec()执行,
ido将传递一些内置变量,例如:

*build该值将是"/tmp/ido_packages_build",它将用于编译源包。
*前缀可以在命令行选项"-p"或"-prefix"中传递,也可以在环境中定义,脚本可以使用它作为`./configure--prefix`.
*home current user home directory.


还有一些内置的函数、对象或模块,例如:

*modules
*os
*sys
*函数
*`sh()`用于执行shell命令,`sh('ls')`
*`cd()`用于更改当前目录,`cd(build)`
*`mkdir()`用于创建目录,`mkdir('/tmp/a/b')`
*`wget()`用于从Internet下载文件,` wget('http://zlib.net/zlib-1.2.8.tar.gz')`
*`cp()`用于将源文件(可以使用fnmatch匹配文件名)复制到目标目录或文件,`cp('zlib*',build)`
*`install()`用于安装其他包,` install('zlib')`
*`message()`用于输出彩色消息,`message(msg,'error')`,第二个参数
将是'error`,`info`,`prompt`,`cmd`或略去。
*`tarx()`用于执行解压tarball文件,`tarx('a.tar.gz')`
*`unzip()`用于解压zip文件,unzip('a.zip')`
*`pip()`用于调用pip工具来安装包

*color objects
*`fore`,`back`,`style`它们是colorama对象,因此您可以直接使用它们。


\packages index

packages应该保存在一个目录中,我称之为"索引",我可以从中搜索包。ido
可以支持多个索引源,默认值在ido包中提供,它是"ido/package s"
,ido还支持其他本地directoires或url链接,因此,可以在命令行中传递它们,就像:

```
ido install zlib-i~/packages
ido install zlib-i https://yourname/packages(尚未实现)
ido install zlib-i~/packages-i https://yourname/packages
```

也可以在环境变量中定义` ido_index`,因此搜索顺序为:

1。命令行参数
1。设置文件
1。环境变量
1。默认的"ido/packages"命令选项

因此,可以在命令参数中定义它们,例如:

```
ido install zlib-evar1=demo1-evar2
````

如果你想看到它们,你可以通过`-v`来看到它们。


但是,您可以使用它来构建自己的包系统,使其变得有用。

愿望。

zlib demo

ido中已经有一些基本或演示包,例如zlib,您可以在"ido/packages/zlib"中找到它,其中有一个"install.py"文件。内容是:


```
filename=cp('zlib*',build,wget='http://zlib.net/zlib-1.2.8.tar.gz')
cd(build)
cd(tar(filename))
sh('./configure--prefix=%s%prefix)
sh('make install')
````

本演示演示如何将zlib文件复制到build目录,如果不存在,它将从Internet下载zlib文件,然后编译并安装。函数
如'cp'、'sh'、'cd'、'tar'是可以直接使用的内置函数。` build`,`prefix`是内置变量,也可以直接使用。

wget='http://zlib.net/zlib-1.2.8.tar.gz')
cd(build)
cd(tar(filename))
sh('./configure--prefix=%s%prefix)
sh('make install')
`````

,这样您可以在其中定义命令行选项并通过"ido call package"调用它。

它们是:`install`可以安装多个软件包,但没有选项。
但"call"只能安装一个软件包,但您可以为其提供选项。所以对于简单的
脚本,"install"就足够了,但是对于复杂的脚本,可以使用"call"。


但ido也可以将下载的文件缓存在
`files`目录中。所以如果一个文件已经下载了,它就不会再下载了。你也可以给wget函数赋予'in_path`
参数,或者在命令行中给'f files_directory`
,ido也会搜索这些目录中的文件,所以搜索
需要下载的文件名的顺序是:

1。`在参数目录中
1。命令行参数"-f"的目录

将源文件复制到目标目录。它还支持文件名模式
,例如:`'zlib*'`,等等。如果源文件名是相对的,它将根据命令行的
to`in_path`或`-f`参数搜索文件。如果找不到文件名,则
它将使用"wget"命令根据"wget"参数下载,例如:

````
filename=cp('zlib*',build,wget='http://zlib.net/zlib-1.2.8.tar.gz')
```

如果命令成功,它只返回文件名的基名。例如:`zlib-1.2.8.tar.gz`
>
将当前目录更改为"path"。它还支持"with"语句,例如:

```
with cd('/tmp'):
do
如果不这样做,那么使用"os.makedirs`

提取tarbar文件后返回提取的目录。因此,在提取tarbar之后,您可以轻松地更改
目录'cd(tarx(filename))`


您应该使用'sh('zip zip file files')`命令。

因此,您可以在提取tarbar之后更改
directory轻松地"cd(unzip(filename))`

它会自动为您添加"-o"(覆盖现有文件),因此如果您不喜欢这些文件,您应该使用"sh('unzip zipfile')`

pip

``
def pip(包,index=none,requirements=none)
```

it将使用pip命令工具安装python包。` packages`可以是元组、列表,也可以是单个包名,例如:

````
pip(['uliweb','plugs'])
pip('uliweb')
````

>默认情况下,pip将使用本地目录来查找包,因此,如果不传递,应该在命令行中传递"-f"参数
,默认的包目录将是当前目录。
并且pip()将尝试在文件目录中安装包,如果失败,它将尝试下载
包并将其保存在文件目录中,然后重新安装。因此,在执行pip()
函数后,包文件将在文件目录中找到。

/>命令行来安装它,它将首先尝试在本地安装,如果失败,它将尝试使用索引安装。您可以使用"-c/path/settings.py"
指定设置文件,否则默认情况下它将使用`~/.ido/settings.py'。你应该知道,在你第一次安装ido之后,不应该有一个默认的settings.py,所以你应该通过命令行选项给它或者自己在`~/.ido'中创建它。

settings文件是一个纯python文件,它的内容应该如下:

```
index=[]
prefix='$home/env'
files='$home/files'
pre-load=[('sh','sh')]
`````

`prefix`和'files`就像环境变量'ido prefix'和'ido\'files'或命令一样`-f——文件`.

`pre_load`用于假装从给定的模块路径导入某个对象,上面的示例菜单:
import`sh`模块并将其别名为'sh`,因此,您可以在安装脚本中直接使用"sh"


,"pre-load"的格式可以是:

```
pre-load=[
('module-path','alias-name'),
('module-path','*'),
('module-path',['a','b']),
]
```

>上面的示例演示了三种格式:

1。导入'module_path',并将其别名为'alias_name',例如:('os.path','path')
2。导入"module\u path",并将在"all"中定义的对象添加到脚本命名空间
3。导入'module_path',只将对象'a'和'b'添加到脚本命名空间

您不知道是否有要安装的包,可以使用

````
ido搜索模式
````

这里的"模式"可以是完整的包名或包名的子字符串。使用
这个命令,包目录中应该有一个"index.txt"文件,它只是一个纯文本文件,每个包应该有一行。搜索时,它将跳过
``开始的名称,例如``u init.py`

ido将为您创建。如果省略"package_directory"参数,它将搜索ido安装目录的"packages"
目录,并在其中保存"index.txt"。



首先,您应该像这样更改脚本:

````
用法='[options]args'
选项列表=(
生成选项('-t','--test',dest='test',
帮助='test',


def call(args,选项:
print(args)
print(options.test)
````

您还可以定义"usage"来描述这个命令的用法。然后,您应该定义一个名为"call(args,options)"的函数,就像调用"options,args=parser.parser_args(argv)"

你可以:

````
ido info test\u call
````

install和call的代码有点不同。但是您可以在"def call(args,options):"函数中编写代码。


Y输出环境变量
*demo a demo package
*nginx install nginx via source
*redis install redis via source
*zlib install redis via zlib

\cd函数,支持'with`statement
*索引可以是一个链接,因此可以从net执行命令
*improve`tarx`和'unzip`
*improve`cp`,添加'wget'参数,因此如果找不到文件,它将根据"wget"
参数通过"wget"工具下载
*添加设置配置支持
*添加"nginx"、"pcre"、"redis"示例
*0.3
*添加"search"和"create index"子命令,您可以创建到
包目录的索引文件,并使用"ido search package"搜索包是否存在
*添加"call"和"info"子命令,可以对包脚本进行命令选项
*0.3.1
*在脚本中添加"usage"定义
*相对前缀修复,文件等错误4
*0.4
*使用compat.py重构py2&3兼容布局
*0.5
*将安装脚本文件扩展名从`.py`更改为`.ido`
*ido将默认搜索当前目录,因此,可以直接运行"ido install your.ido"
*remove cache选项,并且应该始终使用files选项。
*add`pip()`function

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本