2016-01-11 49 views
4

我是新来的Python,我搜索了很多谷歌,并阅读了一些关于相对导入等的文章。尽管我无法得到它的工作。请考虑我的以下项目结构:Python项目结构和相对导入

/Project 
    /docs 
    /log 
    /prev 
    /src 
     a.py 
    /tests 
     /tests1 
      b.py 
     /tests2 
    .gitignore 
    README.txt 
    program.py 

而且我想要做到的,是从文件导入a.py脚本b.py的内部类。一般来说,脚本b.py应该具有输入a.py的行。我读过一些关于使用__init__.py文件的文章,我应该在哪里放置它们?我应该以某种方式更换PYTHONPATH,怎么样?而最后一个问题,是项目结构可以吗?感谢您的时间和帮助!

+2

看一看例如http://www.jeffknupp.com/blog/2013/08/16/open-sourcing-a-python-project-the-right-way/ - 你应该编写一个'setup.py'和* install *你的包用于测试导入。 '/ tests'目录本身通常不是一个模块(所以不需要'__init __。py') - 参见https://pytest.org/latest/goodpractises.html#goodpractises – jonrsharpe

+0

@jonrsharpe“/ tests目录本身不是'通常是一个模块“ - 你是指那里的软件包而不是模块吗? –

+0

@TomDalton是的,包 – jonrsharpe

回答

1

您可以在父文件夹添加到Python路径(sys.path中):

import sys 
sys.path.insert(0,'../..') 

from a import class_name 
+1

事件如果它在这里解决了这个问题,我认为在大多数情况下这不是一个有价值的选择。必须做这些技巧往往意味着项目本身的架构是不好的。我想到的一些命题是:使用setup.py来构建开发/测试名称空间和依赖项,并在测试中使用绝对导入;使用适当的测试跑步者;等等 – FunkySayu