如果我有一个基本的Python脚本,有它的hashbang和什么不到位,那么从Linux上的终端我可以运行
/path/to/file/MyScript [args]
不执行解释器或任何文件扩展名,它将执行程序。
所以我会安装这个脚本,以便我可以简单地输入
MyScript [args]
系统中的任何地方都会运行?这可以为系统上的所有用户实现,还是必须为每个用户重做?我只是将脚本放在特定目录中,还是其他必要的东西?
答案 0 :(得分:21)
放置这类内容的最佳位置是/usr/local/bin
。
这是放置自定义安装二进制文件的正常位置,应该在PATH
的早期。
只需在那里复制脚本(可能使用sudo
),它应该适用于任何用户。
答案 1 :(得分:8)
只需创建~/bin
并将export PATH=$PATH:$HOME/bin
放入bashrc /个人资料中即可。不要搞乱系统,会咬你回来,相信我。
更多的事情(与问题相关但不是答案的一部分):
export PATH=$HOME/bin:$PATH
不安全,因为bash会查看您的~/bin
文件夹中的可执行文件,如果他们的名字与原始$PATH
中的其他可执行文件匹配,您将会意外/非工作命令执行感到惊讶。 chmod+x
保存脚本时,请不要忘记~/bin
。~/bin
文件夹中的内容,如果您只是在测试某些内容或处理未完成的脚本,最好使用CWD
中的./$SCRIPT_NAME来执行脚本而不是放在~/bin
下。答案 2 :(得分:8)
创建一个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)
您还可以使用setuptools
(https://pypi.org/project/setuptools/)
def hi():
print("hi")
(假设文件名为hello.py
)
还要在脚本旁边添加__init__.py
文件(其中没有任何内容)。
添加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,
)
python setup.py develop
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
。