如何使用PYTHONPATH

Ran*_*tka 150 python unix

我怎样才能使用PYTHONPATH?当我尝试在路径中运行脚本时,找不到该文件.当我cd到包含脚本的目录时,脚本运行.那么PYTHONPATH有什么用呢?

$ echo $PYTHONPATH
:/home/randy/lib/python

$ tree -L 1 '/home/randy/lib/python' 
/home/randy/lib/python
??? gbmx_html.py
??? gbmx.py
??? __init__.py
??? __pycache__
??? scripts
??? yesno.py

$ python gbmx.py -h
python: can't open file 'gbmx.py': [Errno 2] No such file or directory

$ cd '/home/randy/lib/python'
Run Code Online (Sandbox Code Playgroud)

cd到文件目录后运行..

$ python gbmx.py -h
usage: gbmx.py [-h] [-b]
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用PYTHONPATH?

Ped*_*eck 187

我觉得你有点困惑.PYTHONPATH设置导入 python模块的搜索路径,而不是像你正在尝试那样执行它们.

PYTHONPATH增加模块文件的默认搜索路径.格式与shell的PATH相同:一个或多个目录路径名由os.pathsep分隔(例如Unix上的冒号或Windows上的分号).默认忽略不存在的目录.

除了普通目录之外,单个PYTHONPATH条目可以引用包含纯Python模块的zip文件(源代码或编译形式).无法从zip文件导入扩展模块.

默认搜索路径是依赖于安装的,但通常以prefix/lib/pythonversion开头(参见上面的PYTHONHOME).它总是附加到PYTHONPATH.

如上所述,在接口选项下,将在PYTHONPATH前面的搜索路径中插入一个附加目录.搜索路径可以在Python程序中作为变量sys.path进行操作.

http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH

您正在寻找的是PATH.

export PATH=$PATH:/home/randy/lib/python 
Run Code Online (Sandbox Code Playgroud)

但是,要将python脚本作为程序运行,还需要在第一行中为Python 设置shebang.这样的事情应该有效:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

并赋予它执行权限:

chmod +x /home/randy/lib/python/gbmx.py
Run Code Online (Sandbox Code Playgroud)

那么你应该能够gmbx.py从任何地方运行.

  • 谢谢你,朋友。我仍在解决这个问题。我的脚本确实成功地从我的自定义 PYTHONPATH 导入了我的模块。现在我明白了区别:这完全是关于脚本与模块;命令脚本调用与 python 导入。是的,我实际上会使用`export PATH=$PATH:/home/etc` (2认同)

Ric*_*ard 54

你混淆了PATH和PYTHONPATH.你需要这样做:

export PATH=$PATH:/home/randy/lib/python 
Run Code Online (Sandbox Code Playgroud)

python解释器使用PYTHONPATH来确定要加载的模块.

shell使用PATH来确定要运行的可执行文件.


cod*_*ure 37

PYTHONPATH只影响import语句,而不是顶级Python解释器查找作为参数给出的python文件.

需要PYTHONPATH设置并不是一个好主意 - 与依赖于环境变量的任何东西一样,在不同的机器上一致地复制事物会变得棘手.更好的是使用Python'包',可以在Python已经知道的系统相关路径中安装(使用'pip'或distutils).

阅读[ http://guide.python-distribute.org/introduction.html - Broken Link] https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/ - 'The Hitchhiker's包装指南',以及http://docs.python.org/2/tutorial/modules.html - 它解释了PYTHONPATH和较低级别的包装.


Tig*_*uev 5

在您的示例中设置 PYTHONPATH 后,您应该能够做到

python -m gmbx
Run Code Online (Sandbox Code Playgroud)

-m选项将使 Python 在路径中搜索您的模块 Python 通常在其中搜索模块,包括您添加到 PYTHONPATH 的内容。当您运行解释器 like 时python gmbx.py,它会查找特定文件并且 PYTHONPATH 不适用。