PYTHONPATH 环境变量

jer*_*ome 26 python environment-variables

我有这个~/.profile

export PYTHONPATH=/home/dev/python-files
Run Code Online (Sandbox Code Playgroud)

python-files目录中,我有一些从 git-hub 克隆的项目(flask、curveship 和 py-vgdl)。

每当我尝试启动这些项目中的任何示例时,都会收到类似于以下内容的错误:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core
Run Code Online (Sandbox Code Playgroud)

在我看来,我不应该收到此错误,因为我PYTHONPATH设置了该环境变量?

运行 python 交互式解释器:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Run Code Online (Sandbox Code Playgroud)

Nit*_*esh 46

尝试附加到 PYTHONPATH 而不是完全覆盖它。

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files
Run Code Online (Sandbox Code Playgroud)

参考:

根据PYTHONPATH 上Python 文档

增加模块文件的默认搜索路径。[...]

默认搜索路径取决于安装,但通常以prefix/lib/pythonversion(见PYTHONHOME上文)开头。它总是附加到PYTHONPATH.

这意味着某些值存在于PYTHONPATH并且默认搜索路径也仅被附加。

此外,这篇博文Archive.org 链接)还清楚地解释了为什么需要附加PYTHONPATH而不是覆盖它。向下滚动到该部分 -特殊情况并检查搜索路径会清楚地解释它(不幸的是没有该链接的相对 URL,因此您必须滚动)。尽管用户在 mac 上给出了示例,但它们与任何平台都非常相关


Mru*_*aju 7

您还可以执行以下操作:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd 是当前的工作目录。

  • 请注意,这将在此过程中覆盖您的 PYTHONPATH!如果要将密码添加到 PYTHONPATH:`export PYTHONPATH=$PYTHONPATH:$(pwd)` (2认同)

And*_*ini 5

PYTHONPATH应该指向您的 Python 包和模块所在的位置,而不是您的结帐所在的位置。换句话说,如果你这样做,ls "$PYTHONPATH"你应该看到*.py文件(Python 模块)和包含__init__.py文件的目录(Python 包)。

所以,如果你想能够import vgdl,你PYTHONPATH应该是这样的:

PYTHONPATH=/home/dev/python-files/py-vgdl
Run Code Online (Sandbox Code Playgroud)

因为vgdl 包裹在里面py-vgdl,而不是里面python-files

要添加其他路径,您可以使用:将它们分开:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"
Run Code Online (Sandbox Code Playgroud)

这确实有效,但是,对于这种情况,使用PYTHONPATH可能过于复杂。我推荐的是使用virtualenv,这是为了简化像你这样的情况而特意制作的。你要做的基本上是:

  1. 创建环境: virtualenv env
  2. “激活”它: source env/bin/activate
  3. 安装您的软件包:这可以使用您的软件包pipsetup.py脚本或脚本来完成。
  4. 享受。

我没有提供太多信息,因为 virtualenv 有据可查,如果您需要帮助,最好提出一个新问题。