如何在另一个文件夹中调用另一个.py的def

时间:2016-09-08 18:19:35

标签: python

我有以下结构: utils_dir有generator.py文件,有3个defs。

我在inline_dir中有test.py.我试图在test.py中使用来自generator.py的defs。

inline_dir和utils_dir位于不同的文件夹中。 如何使用defs实现它?

尝试创建_init_.py然后调用import generator。 - 没工作。 尝试from utils import generator - 没有效果

Dir structure

Support_dir ├── dir_A │ ├── dir_aa │ └──----- main.py [Want to use a and b from generator.py] └── utils | └── generator.py | |___ def a |___ def b

2 个答案:

答案 0 :(得分:1)

听起来你正试图在子目录中执行.py文件。

假设以下目录结构:

select 1 from sys.obj$ where 1=0;

您的. ├── inline │   ├── __init__.py │   └── main.py └── utils ├── __init__.py └── generator.py 包含一个简单的导入,例如main.py中定义的函数a()

generator.py

from utils.generator import a if __name__ == '__main__': a() 看起来像这样:

generator.py

您将无法使用def a(): print "hi there" 运行程序,因为这会将模块搜索路径设置为python inline/main.py

如果要在从项目级别导入时在子目录中执行文件,可以执行以下操作:

inline/

更新:添加了示例PYTHONPATH=. python inline/main.py

答案 1 :(得分:1)

这是一种python路径问题。导入时,python将搜索当前目录和默认系统路径目录。由于utils_dir不是您当前的工作目录(导入时,您使用的是inline_dir),也不是默认的python搜索系统路径,因此导入无效。

一种简单的解决方法是

A)。首先将utils_dir设为python包:只需在目录中添加 init .py。

B)。然后,将utils_dir的父文件夹路径添加到PYTHONPATH环境变量。

export PYTHONPATH=/home/user/parent_of_utils_dir:$PYTHONPATH

您可以将此行添加到.bashrc中,以使其始终可用。

C)。在test.py中,导入函数

from utils import generator

import utils.generator

更多的python开发方式是使用setuptools,并编写python脚本setup.py,它将解决依赖性问题。然后你可以使用

python setup.py develop

在开发模式下使用。

https://packaging.python.org/

查看更多python包开发指南

希望这会对你有所帮助。