编辑:根据下面的讨论,我认为我的问题真的适用于任何语言。Python通过pip
自然有一个打包系统和安装过程。但假设这是C代码或perl脚本。用户仍然可以下载程序文件,并且可以通过capsall input.txt
在命令行中执行代码。在
我有一个python脚本,它接受一个输入文件并给出一个输出文件。在
例如,这个脚本file1.py
接受一个输入文本文件并输出一个所有字母都大写的文本文件:
import sys
inFile = sys.argv[1]
outFile = sys.argv[2]
with open(inFile,'r') as input_file:
lines = input_file.readlines()
# process the input file somehow
# here we simply capitalize the text,
# but naturally something more complex is possible
capitalized_lines = []
for line in lines:
capitalized_lines.append(line.upper())
with open(outFile,'w') as output_file:
for line in capitalized_lines:
output_file.write(line)
用户现在执行此代码的方式
^{pr2}$假设我想发布这段代码,这样用户就可以下载一个tarball,并能够在命令行中使用(例如)执行上面的操作
capsall input.txt
它将运行python file1.py
并输出文件output.txt
。有人写bash脚本吗?如果是这样的话,如何分发代码,以便用户在他们的路径中拥有这些代码?在
为此,我建议使用python打包(例如,[pip])。不管你喜欢什么样的包装方法,除非你喜欢。您的用户已经安装了python,因为他们已经被用来显式地将脚本传递给解释器。如果您对使用python打包感兴趣,请继续阅读。在
首先,我将把你的脚本和其他需要的处理放在一个包中。我们称之为
mylibrary
。你的项目应该看起来像:保持初始化py简单,并确保可以导入它而不需要依赖关系。我用的是:
^{pr2}$接下来,添加一个名为设置.py在根上。这将定义您的包、它的元数据以及要安装到用户的
$PATH
中的脚本。以下将很好地工作:如果你打算上传到pypi.python.org,则至少需要那么多元数据。我建议也添加
classifiers
。关于写a设置.py是无价的。在您最感兴趣的部分是
entry_points
关键字参数。它定义了调用包的各种方式。您正在寻找console_scripts
,因为它创建安装到本地路径中的shell脚本。有关详细信息,请参阅setuptools documentation。在我在上面给出的
console_scripts
定义创建了一个名为capsall的脚本,该脚本调用my project.capsall.main
函数。我会把你的代码重新打包到一个项目中。将脚本绑定到main函数中capsall.py公司模块。然后生成一个源存储库并将其上载到pypi.python.org(./setup.py sdist register upload
)。上传后,用户可以使用pip install myproject
进行安装。在很可能你有你不想给外界的代码。如果是这样,那么您可以生成一个源发行版并使tarball在内部服务器上可用
./setup.py sdist
将在dist目录中生成tarball。然后pip install whatever/myproject-0.0.0.tar.gz
将安装脚本。在在脚本文件的顶部添加一个“hash-bang”,告诉bash调用Python解释器。同时使脚本可执行:
使脚本文件可执行:
^{pr2}$现在可以使用以下命令运行脚本:
或者如果
capsall
在您的路径上:相关问题 更多 >
编程相关推荐