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

jef*_*r13 22 python linux command-line install

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

/path/to/file/MyScript [args]
Run Code Online (Sandbox Code Playgroud)

无需通过解释器或任何文件扩展名执行,它将执行该程序.

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

MyScript [args]
Run Code Online (Sandbox Code Playgroud)

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

agf*_*agf 22

放这样的东西最好的地方是/usr/local/bin.

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

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

  • +1推荐`/ usr/local/bin`.确保脚本也可执行!`sudo chmod 744/usr/local/bin/yourscript`应该这样做. (3认同)

Eri*_*ski 12

在任何地方都可以使用python脚本:

制作一个python脚本:

cd /home/el/bin
touch stuff.py
chmod +x stuff.py
Run Code Online (Sandbox Code Playgroud)

找出你的python在哪里:

which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

把这段代码放在那里:

#!/usr/bin/python
print "hi"
Run Code Online (Sandbox Code Playgroud)

在其中运行相同的目录:

python stuff.py
Run Code Online (Sandbox Code Playgroud)

上一个目录,它不可用:

cd ..
stuff.py

-bash: stuff.py: command not found
Run Code Online (Sandbox Code Playgroud)

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

vi ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

添加文件:

export PATH=$PATH:/home/el/bin
Run Code Online (Sandbox Code Playgroud)

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

source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

再试一次:

cd /home/el
stuff.py
Run Code Online (Sandbox Code Playgroud)

打印:

hi
Run Code Online (Sandbox Code Playgroud)

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


Sud*_*dhi 8

只需创建~/bin并放入export PATH=$PATH:$HOME/bin您的bashrc/profile.不要乱用系统,它咬你,相信我.

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

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

  • 另一种想法:有时候"人们不了解其含义"的答案就是教导他们. (3认同)

Azi*_*lto 8

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

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

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

#!/usr/bin/python
print("Hello Pythonista!")
Run Code Online (Sandbox Code Playgroud)

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!
Run Code Online (Sandbox Code Playgroud)


小智 6

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

sudo ln -s /path/to/your/script.py /usr/local/bin/script
Run Code Online (Sandbox Code Playgroud)


jfg*_*956 5

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

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

alias MyScript=/path/to/file/MyScript
Run Code Online (Sandbox Code Playgroud)


Alo*_*man 5

你也可以使用setuptoolshttps://pypi.org/project/setuptools/

  1. 你的脚本将是:
def hi():
    print("hi")
Run Code Online (Sandbox Code Playgroud)

(假设文件名为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,
    )

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