我的pythonpath有问题

0 投票
6 回答
2105 浏览
提问于 2025-04-16 12:29

我知道这个问题可能有点傻,但我真的搞不懂。我之前的文件夹结构是这样的:

-src
  |
  -module.py
  -program.py

在这个结构下,我可以从程序中引用模块,一切都很顺利。

但我后来把文件夹结构改成了这样:

-src
  |
  -__init.py
  -module.py
  |
  -programDir
    |
    -__init.py
    -program.py

现在,当然,我无法从程序中访问模块了。我该如何把src当作一个包来引用呢?我尝试在src目录下创建一个

__init__.py 

文件,但没有成功。

更多细节:我在program.py中尝试过的导入语句:

import module

还有

from src import module

第一个在模块和程序在同一个目录时是可以用的。

我遇到的错误是:

ImportError: No module named module

顺便说一下:不,我的模块和程序并不是叫module或者program。

更新:我在program.py文件中尝试了这个:

from ...src import module

还有

from ..src import module

这两个都给我返回了:

ValueError: Attempted relative import in non-package

6 个回答

0

第一个方法之所以有效,是因为Python的 sys.path 的第一个条目是空字符串'',这意味着它会在你运行Python解释器的当前工作目录中查找模块名称。

你遇到的问题是,src 这个目录没有被添加到你的PYTHONPATH中。所以,你可以手动设置PYTHONPATH这个环境变量。

下面是一个使用bash的例子:

export PYTHONPATH=PATH_TO_SRC:${PYTHONPATH}

然后像往常一样运行你的程序。

另一种方法是,在运行程序时,直接向 sys.path 添加路径。

所以,在你的 program.py 文件中,你可以这样写:

if __name__ == '__main__':
    import os
    import sys
    sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    your_main_function()

最后,如果你认真进行Python开发,建议你考虑使用 virtualenvvirtualenvwrapper,因为它们可以帮你处理大部分这些问题。

2

首先,我建议你阅读一下文档中的这篇文章:修改 Python 的搜索路径

虽然有些人可能不太赞成,但如果你想在你的程序中修改 PYTHONPATH,根据文档中的 标准模块部分,你可以使用 sys.path.append 方法:

import sys
sys.path.append('..')
import module
1

你难道不能用 PEP 328 来解决这个问题吗?

撰写回答