说我有以下树:
~/python
├── one
└── toto.py
└── two
└── toto.py
即使在export PATH=$PATH:~/python
之后,我似乎也无法从python one/toto.py
以外的任何地方投放python two/toto.py
和~
。有没有办法做到这一点?谢谢!
答案 0 :(得分:2)
您可以通过PYTHONPATH
代替PATH
来实现目标。然后,您可以告诉解释器直接运行模块而不是脚本。例如:
$ export PYTHONPATH=$PYTHONPATH:~/python
$ python -m one.toto
$ python -m two.toto
请注意,我们不包含扩展名,并且分隔符已从/
更改为.
,因为我们现在处理的是python模块,而不是文件系统路径。
答案 1 :(得分:1)
如评论中所述。
Linux中的 $PATH
用于查找可执行文件。在这种情况下,Python
找到此可执行文件后,将执行"在"当前的工作目录并从那里开始工作。
当Python
获取参数one/toto.py
时,它将在您的文件夹和文件后从./
开始查看。
您可以创建一个包装器脚本,将其放在/usr/bin/mywrap.py
下,将其标记为可执行文件并使用for path in sys.path:
并尝试找到您的模块并动态导入它并执行"移交& #34;它。
Python
二进制文件中没有任何魔法可以遍历$PATH
,因为这是一个shell变量,用于在操作系统中查找二进制文件。与Windows中的PATH
非常相似。