关于Linux:递归搜索Python脚本

recursive search for python scripts

假设我有以下树:

1
2
3
4
5
~/python
  ├── one
      └── toto.py
  └── two
      └── toto.py

即使在export PATH=$PATH:~/python之后,我似乎也不能从~以外的任何地方运行python one/toto.pypython two/toto.py。有办法吗?谢谢!


一种方法是使用PYTHONPATH,而不是PATH。然后,您可以告诉解释器直接运行模块而不是脚本。例如:

1
2
3
$ export PYTHONPATH=$PYTHONPATH:~/python
$ python -m one.toto
$ python -m two.toto

注意,我们不包括扩展名,分隔符已经从/改为.,因为我们现在处理的是python模块,而不是文件系统路径。


如评论中所述。

Linux中的$PATH用于查找可执行文件。在这种情况下,这就是Python。找到这个可执行文件后,它将在当前工作目录中"执行",并从那里开始工作。

也就是说,当Python得到参数one/toto.py时,它将从./开始查找文件夹和文件。

您可以创建一个包装脚本,将其放在/usr/bin/mywrap.py下,将其标记为可执行文件并使用for path in sys.path:,然后尝试查找模块并动态导入它并对其进行"移交"。

由于这是一个用于在操作系统中查找二进制文件的shell变量,因此在Python二进制文件中没有遍历$PATH的魔力。与windows中的PATH非常相似,它也用于同样的目的。

  • 使用字符串作为名称导入文件