如何安装脚本以在命令行中的任何位置运行?

时间:2011-08-06 14:05:13

标签: python linux command-line install

如果我有一个基本的Python脚本,有它的hashbang和什么不到位,那么从Linux上的终端我可以运行

/path/to/file/MyScript [args]

不执行解释器或任何文件扩展名,它将执行程序。

所以我会安装这个脚本,以便我可以简单地输入

MyScript [args]

系统中的任何地方都会运行?这可以为系统上的所有用户实现,还是必须为每个用户重做?我只是将脚本放在特定目录中,还是其他必要的东西?

10 个答案:

答案 0 :(得分:21)

放置这类内容的最佳位置是/usr/local/bin

这是放置自定义安装二进制文件的正常位置,应该在PATH的早期。

只需在那里复制脚本(可能使用sudo),它应该适用于任何用户。

答案 1 :(得分:8)

只需创建~/bin并将export PATH=$PATH:$HOME/bin放入bashrc /个人资料中即可。不要搞乱系统,咬你回来,相信我。

更多的事情(与问题相关但不是答案的一部分):

  1. 另一种方式export PATH=$HOME/bin:$PATH不安全,因为bash会查看您的~/bin文件夹中的可执行文件,如果他们的名字与原始$PATH中的其他可执行文件匹配,您将会意外/非工作命令执行感到惊讶。
  2. chmod+x保存脚本时,请不要忘记~/bin
  3. 请注意您在~/bin文件夹中的内容,如果您只是在测试某些内容或处理未完成的脚本,最好使用CWD中的./$SCRIPT_NAME来执行脚本而不是放在~/bin下。

答案 2 :(得分:8)

在任何地方提供python脚本的演练:

创建一个python脚本:

cd /home/el/bin
touch stuff.py
chmod +x stuff.py

找出你的python的位置:

which python
/usr/bin/python

将此代码放在那里:

#!/usr/bin/python
print "hi"

在同一目录中运行:

python stuff.py

上一个目录并且它不可用:

cd ..
stuff.py

-bash: stuff.py: command not found

未找到!正如我们所期望的那样,将python文件的文件路径添加到$ PATH

vi ~/.bashrc

添加文件:

export PATH=$PATH:/home/el/bin

保存,重新应用.bashrc,然后重试

source ~/.bashrc

再试一次:

cd /home/el
stuff.py

<强>打印

hi

诀窍是bash shell通过shebang知道文件的语言。

答案 3 :(得分:6)

快速回答是symlink您的脚本到系统$PATH中包含的任何目录。

下面将通过一个示例来描述长答案(这是我通常所做的):

a)创建脚本,例如$HOME/Desktop/myscript.py

#!/usr/bin/python
print("Hello Pythonista!")

b)更改脚本文件的权限以使其可执行:

$ chmod +x myscript.py

c)将自定义目录添加到$PATH(请参阅下面的注释中的原因)以将其用于用户的脚本:

$ export PATH="$PATH:$HOME/bin"

d)创建脚本的符号链接,如下所示:

$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello

请注意,hello(可以是任何内容)是您将用于调用脚本的命令的名称。

注意:

i)使用$HOME/bin而不是/usr/local/bin的原因是将本地脚本与其他用户(如果您愿意)和其他已安装的东西分开。

ii)要创建符号链接,您应该使用完整正确的路径,即

$HOME/bin~/bin不好!

这是一个完整的例子:

 $ pwd
 ~/Desktop
 $ cat > myscript.py << EOF
 > #!/usr/bin/python
 > print("Hello Pythonista!")
 > EOF
 $ export PATH="$PATH:$HOME/bin"
 $ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
 $ chmod +x myscript.py
 $ hello
Hello Pythonista!

答案 4 :(得分:4)

将脚本放在PATH中的某个位置(如/usr/local/bin)是一个很好的解决方案,但强制系统的所有用户使用/查看脚本。

/etc/profile中添加别名可以是一种方法,可以让您的系统用户使用unalias命令撤消此操作。要添加的行将是:

alias MyScript=/path/to/file/MyScript

答案 5 :(得分:3)

在shell中输入echo $PATH。这些是您键入command时搜索到的目录,因此将其放入其中一个目录中。

修改:显然不要使用/usr/bin,请使用/usr/local/bin

答案 6 :(得分:3)

您还可以使用setuptoolshttps://pypi.org/project/setuptools/

  1. 您的脚本将是:
def hi():
    print("hi")

(假设文件名为hello.py

  1. 还要在脚本旁边添加__init__.py文件(其中没有任何内容)。

  2. 添加setup.py脚本,内容如下:

#!/usr/bin/env python3

import setuptools

install_requires = [
        'WHATEVER PACKAGES YOU NEED GOES HERE'
        ]

setuptools.setup(
    name="some_utils",
    version="1.1",
    packages=setuptools.find_packages(),
    install_requires=install_requires,
    entry_points={
        'console_scripts': [
            'cool_script = hello:hi',
        ],
    },
    include_package_data=True,
    )

  1. 您现在可以在此文件夹中运行python setup.py develop
  2. 然后从任何地方运行cool_script,脚本将运行。

答案 7 :(得分:2)

只需在/ usr / local / bin /中创建指向您脚本的符号链接:

sudo ln -s /path/to/your/script.py /usr/local/bin/script

答案 8 :(得分:1)

在我的~/.bash_profile~/.zshrc中找到一个简单的别名是最简单的:

alias myscript="python path/to/my/script.py"

答案 9 :(得分:0)

根据FHS/usr/local/bin/是自定义脚本的好地方。 在将它们复制到那里之后,我更愿意将它们755 root:root