0

我一直将我的代码放在 github 上,但我遇到了实现障碍。我在许多计算机上运行相同的代码(包括我没有 root 访问权限的计算机)。

一段代码(一个 bash 脚本)调用一些 python 代码,例如:

python somecode.py

shell 将运行正确版本的 python,但它不会找到 somecode.py。

我试过的:

失败#1:我尝试将包含 somecode.py 的目录和文件的完整路径都添加到 PATH;无济于事。[Errno 2] 没有这样的文件或目录

失败#2:只有在顶行中添加正确版本的python的完整路径时,我才能使其适用于一台计算机:

#!/usr/local/cool/python/version/location

但是,这会破坏它在任何其他计算机上的运行。

失败#3:如果我让 bash 脚本说,我也可以让它工作:

python /full/path/to/github/place/somecode.py

但同样,这仅适用于一台计算机,因为不同计算机的路径不同。

我真正想做的是:我希望能够在多台计算机上使用相同的代码(bash 脚本和 somecode.py)。

欢迎任何有关如何正确执行此操作的建议。谢谢!

解决方案

添加:

#!/usr/bin/env python

到我的 somecode.py 代码的顶部;

mv somecode.py somecode
chmod +x somecode

确保 PATH 有 /full/path/to/directory/with/somecode。

Bash 脚本现在只说:

somecode

它有效。

4

2 回答 2

5

对于问题 #2 尝试

#!/usr/bin/env python

尽管它可能会在不同的机器上找到不同版本的 Python,但只要这不是问题,这应该可以解决该特定问题

也请参阅这个 SO question Python deployment and /usr/bin/env portabilityAlex Martelli的这篇文章重新使用了这个。

于 2012-06-25T12:47:20.387 回答
2

如果你说python somefile.py那么它将把 的位置somefile.py作为当前目录,而不是从$PATH. 它将采用pythonfrom的位置$PATH

如果你说somefile.py,那么它将获取somefile.pyfrom的$PATH位置,以及你的 python 脚本行的位置,如果你遵循@Levon 的建议,它可以使用 PATH 。python#!

于 2012-06-25T13:00:06.783 回答