我有以下结构: 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
答案 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包开发指南希望这会对你有所帮助。