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

Python 如何安装脚本以在命令行的任何位置运行?,python,linux,command-line,installation,Python,Linux,Command Line,Installation,如果我有一个基本的Python脚本,它是hashbang,什么都没有,这样我就可以在Linux终端上运行了 /path/to/file/MyScript [args] 不通过解释器或任何文件扩展名执行,它将执行程序 那么,我会安装这个脚本,以便我可以简单地键入 MyScript [args] 系统中的任何位置,它将运行吗?这可以为系统上的所有用户实现,还是必须为每个用户都重新实现?我是简单地将脚本放在一个特定的目录中,还是需要其他东西?放置类似内容的最佳位置是/usr/local/bin 这

如果我有一个基本的Python脚本,它是hashbang,什么都没有,这样我就可以在Linux终端上运行了

/path/to/file/MyScript [args]
不通过解释器或任何文件扩展名执行,它将执行程序

那么,我会安装这个脚本,以便我可以简单地键入

MyScript [args]

系统中的任何位置,它将运行吗?这可以为系统上的所有用户实现,还是必须为每个用户都重新实现?我是简单地将脚本放在一个特定的目录中,还是需要其他东西?

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

这是放置自定义安装的二进制文件的正常位置,应该早在
路径中


只需在那里复制脚本(可能使用
sudo
),任何用户都可以使用它。

在shell中键入
echo$PATH
。这些是键入
命令时搜索的目录,因此请将其放入其中一个目录中

编辑:显然不要使用
/usr/bin
,使用
/usr/local/bin
根据,
/usr/local/bin/
是定制脚本的好地方。
我更喜欢在复制它们之后使它们成为
755
root:root

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

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

alias MyScript=/path/to/file/MyScript

只需创建
~/bin
,并将
导出路径=$PATH:$HOME/bin
放在bashrc/profile中。别搞乱这个系统,它会反过来咬你的,相信我

还有几件事(与问题相关,但不是答案的一部分):

  • 另一种方法是
    export PATH=$HOME/bin:$PATH
    是不安全的,因为bash将查看您的
    ~/bin
    文件夹中的可执行文件,如果它们的名称与原始
    $PATH
    中的其他可执行文件匹配,您将对意外/不工作的命令执行感到惊讶
  • ~/bin
    中保存脚本时,不要忘记
    chmod+x
  • 请注意您在
    ~/bin
    文件夹中放置的内容,如果您只是在测试某些内容或处理未完成的脚本,那么最好使用
    CWD
    中的/$script\u名称来执行脚本,而不是将其放在
    ~/bin
  • 使python脚本在任何地方都可用的演练: 制作python脚本:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    找出python的位置:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    将此代码放在那里:

    #!/usr/bin/python
    print "hi"
    
    在同一目录中运行:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    进入一个目录,但它不可用:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    找不到!正如我们所期望的,将python文件的文件路径添加到$path中

    vi ~/.bashrc
    
    添加文件:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    保存它,重新应用.bashrc,然后重试

    source ~/.bashrc
    
    再试一次:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    打印:

    cd /home/el/bin
    touch stuff.py
    chmod +x stuff.py
    
    which python
    /usr/bin/python
    
    python stuff.py
    
    cd ..
    stuff.py
    
    -bash: stuff.py: command not found
    
    export PATH=$PATH:/home/el/bin
    
    cd /home/el
    stuff.py
    
    hi
    
    诀窍在于bash shell通过shebang知道文件的语言。

    快速答案是将脚本发送到系统中包含的任何目录
    $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!
    
    $pwd
    ~/桌面
    $cat>myscript.py#/usr/bin/python
    >打印(“你好,蟒蛇!”)
    >EOF
    $export PATH=“$PATH:$HOME/bin”
    $ln-s$HOME/Desktop/myscript.py$HOME/bin/hello
    $chmod+x myscript.py
    美元你好
    你好,蟒蛇!
    
    只需在/usr/local/bin/中创建指向脚本的符号链接即可:

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

    您还可以使用
    setuptools
    ()

  • 您的脚本将是:
  • (假设文件名为
    hello.py

  • 还可以在脚本旁边添加
    \uuuuu init\uuuuuuuuuy.py
    文件(其中没有任何内容)

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

  • 现在可以在此文件夹中运行
    python setup.py develope
  • 然后从任何地方运行
    cool\u script
    ,脚本就会运行

  • 我在我的
    ~/.bash_配置文件
    ~/.zshrc
    中找到了一个简单的别名:


    别名myscript=“python path/to/my/script.py”

    否,请不要使用/usr/bin!出于这些目的使用/usr/local/bin。同意,这是不明智的。使用/usr/local/bin代替$PATH,更难看但有时也很有用,可以在$PATH中添加任意目录。您必须处理一个您不想弄乱的重要全局设置,或者单独添加到用户设置中。+1用于推荐
    /usr/local/bin
    。确保脚本也可执行
    sudo chmod 744/usr/local/bin/yourscript应该这样做。这与使用
    -m
    标志i有何不同