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详细信息!对于