Python 我的蟒蛇有什么问题吗

Python 我的蟒蛇有什么问题吗,python,pythonpath,Python,Pythonpath,我知道这是个愚蠢的问题,但我被难住了。我的目录结构以前是这样的: -src | -module.py -program.py 当这是我的目录结构时,我引用了程序中的模块,一切正常 此后,我将目录结构更改为: -src | -__init.py -module.py | -programDir | -__init.py -program.py 现在,当然,我无法从程序中访问模块。如何将src作为包引用。我试图创造一个 __init__.p

我知道这是个愚蠢的问题,但我被难住了。我的目录结构以前是这样的:

-src
  |
  -module.py
  -program.py
当这是我的目录结构时,我引用了程序中的模块,一切正常

此后,我将目录结构更改为:

-src
  |
  -__init.py
  -module.py
  |
  -programDir
    |
    -__init.py
    -program.py
现在,当然,我无法从程序中访问模块。如何将src作为包引用。我试图创造一个

__init__.py 
文件在src目录中,但运气不好

摩押鹿: 我在program.py中尝试过的导入语句:

import module

当另一个模块和程序位于同一目录中时,第一个模块工作

我得到的错误是:

ImportError: No module named module
我只想记录一下:不,我的模块和程序不是模块或程序

更新:我在program.py文件中尝试了以下操作:

from ...src import module

他们都给了我:

ValueError: Attempted relative import in non-package

如果直接使用
python program.py
运行
program.py
,则
module.py
的目录应位于PYTHONPATH中,以便
导入模块
工作。例如,可以使用保存在
programDir
中的helper shell脚本实现这一点,该脚本类似于:

#!/bin/bash

script_dir=`dirname $0`
# Add the script's parent directory to the PYTHONPATH
export PYTHONPATH=$PYTHONPATH:$script_dir/..

python $script_dir/program.py
另一种可能更好的方法是让
program.py
导出一个“
main()
”函数,并在
src/program
处创建一个助手python脚本,该脚本如下所示:

#!/usr/bin/env python
from programDir.program import main
main()
在这种情况下,可以在
src/programDir/program.py
中使用相对导入,因此应该可以:

from .. import module

如果直接使用
python program.py
运行
program.py
,则
module.py
的目录应位于PYTHONPATH中,以便
导入模块
工作。例如,可以使用保存在
programDir
中的helper shell脚本实现这一点,该脚本类似于:

#!/bin/bash

script_dir=`dirname $0`
# Add the script's parent directory to the PYTHONPATH
export PYTHONPATH=$PYTHONPATH:$script_dir/..

python $script_dir/program.py
另一种可能更好的方法是让
program.py
导出一个“
main()
”函数,并在
src/program
处创建一个助手python脚本,该脚本如下所示:

#!/usr/bin/env python
from programDir.program import main
main()
在这种情况下,可以在
src/programDir/program.py
中使用相对导入,因此应该可以:

from .. import module

第一个有效,因为Python的
sys.path
的第一个条目是“”,这意味着它将在您执行Python解释器的当前工作目录中查找模块名称

您似乎遇到的问题是,PYTHONPATH上没有设置位于
src
的目录。因此,您可以显式地设置PYTHONPATH环境变量

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

export PYTHONPATH=PATH_TO_SRC:${PYTHONPATH}
然后正常运行程序

另一种方法是,您可以通过在程序执行时附加它来显式地设置
sys.path

因此,在
程序.py
中,您将有:

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

最后,对于严重的Python开发,你应该考虑,因为它会为你处理大部分这些事情。

< P>第一个工作,因为Python的代码> sys .Posith<代码>的第一个条目是'',这意味着它将在你已经执行Python解释器的当前工作目录中查找模块名称。 您似乎遇到的问题是,PYTHONPATH上没有设置位于
src
的目录。因此,您可以显式地设置PYTHONPATH环境变量

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

export PYTHONPATH=PATH_TO_SRC:${PYTHONPATH}
然后正常运行程序

另一种方法是,您可以通过在程序执行时附加它来显式地设置
sys.path

因此,在
程序.py
中,您将有:

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

最后,对于严重的Python开发,你应该考虑,因为它会为你处理大部分这些事情。

< P>你需要添加<代码>创建包后,可以导入包的内容


因此,在您的情况下,如果
/src
位于
PYTHONPATH
上,从
module.py
可以导入
program.py
,使用
from programDir import program
,您需要将
\uu init\uuuuuuuuu.py
添加到
/programDir
以将目录解释为一个包。创建包后,可以导入包的内容


因此,在您的情况下,如果
/src
位于
PYTHONPATH
上,从
module.py
可以导入
program.py
,对于初学者,我建议阅读文档中的条目

有些人可能不赞成,但如果您希望从程序中修改,根据文档条目,您可以使用sys.path.append方法:

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

对于初学者,我建议阅读文档中的条目

有些人可能不赞成,但如果您希望从程序中修改,根据文档条目,您可以使用sys.path.append方法:

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

是否可以使用来解决此问题?

是否可以使用来解决此问题?

如果将程序作为包的一部分使用,请在另一个python模块中,例如

import src.programDir.program as p

p.some_method()
您可以在program.py中使用相对导入,假设您正在使用src(src和programDir中的
\uuuu init\uuuu.py
创建一个包)


如果不是,例如从命令行调用program.py,则必须在导入之前通过修改
sys.path
或PYTHONPATH env var将包含src的目录添加到搜索路径中。

如果将程序用作包的一部分,则在另一个python模块中,例如

import src.programDir.program as p

p.some_method()
您可以在program.py中使用相对导入,假设您正在使用src(src和programDir中的
\uuuu init\uuuu.py
创建一个包)

如果不是,例如从命令行调用program.py,则必须在导入之前通过修改
sys.path
或PYTHONPATH env var将包含src的目录添加到搜索路径中。

Moar详细信息!对于