Shebang无法为Python脚本工作

6

我一直在StackOverflow上查看许多答案,尝试了所有方法。我在我的AddressConversion.py Python脚本的顶部添加了以下内容。

#!/usr/bin/env python
import argparse

目标是将其作为一个命令实用程序运行,这意味着我可以键入

AddressConversion [options][address]

目前,我只希望能够打字。

./AddressConversion [options][address]

我已经使用chmod命令将文件设置为可执行文件。

我还对文件运行了dos2unix命令,以消除任何随机的Windows字符(尽管这似乎不可能,因为该文件仅在Ubuntu上使用)。

我使用which python命令检查了Python安装情况,结果如下:

/usr/bin/python

我也检查了环境,并获取了类似的路径。

当我使用传统的python命令时,脚本能够正常运行。当我输入以下内容时,它也可以正常工作:

usr/bin/env python

它将打开Python解释器。每当有人问这个问题时,这些步骤似乎是建议的解决方案。我遇到了这个错误:

./AddressConversion.py: line 1: import: command not found
./AddressConversion.py: line 3: syntax error near unexpected token `('
./AddressConversion.py: line 3: `def init_parser():'

看起来好像是试图将它作为一个 shell 脚本或者其他东西来运行。有什么建议吗?


你是在尝试在Python 2还是3下运行程序? - Akshar Patel
1
有时在这个问题中,您写了usr,有时写了user。如果这是一个打字错误,请修正它。否则,请澄清一下。 - Alex Hall
@khelwood 我刚刚运行了一个测试脚本,使用./test.py命令成功执行了,同时/user/bin/env python也打开了Python解释器。 - SlipFist
@AksharPatel 我正在使用Python 2.7。当我使用usr/bin/evn python打开解释器时,它会打开并显示它是2.7版本。 - SlipFist
@SlipFist:第一行使用了 python2。请问 /usr/bin/env python2 能够在您的终端中正确打开 Python 吗? - Guybrush
显示剩余10条评论
2个回答

2

创建了一个名为executeme.py的文件。

#!/usr/bin/env python
print("hello")

使其可执行(可选)
chmod a+x executeme.py

重命名文件

mv executeme.py executeme

立即执行

./executeme

输出

hello

另一种创建一个 setup.py 文件的方式,更多信息请参考这里。在 entry_points 中有一个键名为 console_script,你可以以 'name=target' 的格式指定执行器和目标模块的名称。
from setuptools import setup, find_packages
setup(
    name='executor',
    packages=find_packages(),
    install_requires=[,
    ],
    entry_points = {
              'console_scripts': [
                  'executeme=executeme:main',
              ],
          },
)

那么运行这个命令。
pip install -e /path/to/setup.py

在开发模式下从本地源安装,即以这种方式安装项目,使其看起来已经安装,但仍可从源树进行编辑。 pipdoc

@pipdoc 感谢您的建议,我可以在其他脚本上执行该过程,但不能在这个特定的脚本上执行。这就是为什么我觉得很奇怪的原因。从外表看,我可能只是在我的脚本中有一些奇怪的隐藏字符。没有其他原因导致它无法工作。 - SlipFist
建议您检查缩进。 - Roushan
我不知道为什么,但是将它从我的pastebin链接复制并粘贴到一个名为test.py的新文件中解决了问题。真烦人... - SlipFist
为什么在调用文件时需要使用“./”,即使我在同一目录下,没有它也无法正常工作? - sjd

2

我曾遇到过类似的问题,最终发现是因为行末有CRLF。这是在Windows机器上创建脚本时添加的。要检查是否是这种情况,请使用file命令。

file script.py

它会给你一个输出结果,类似于这样:"Python脚本,ASCII文本可执行文件,带有CRLF行终止符"

要去除CRLF行终止符,请按照以下步骤操作。

dos2unix script.py

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接