我有第三方包,看起来像这样:
packagename
├── subfolder1
| ├── Someclass11.py
| ├── ...
| └── __init__.py <- EMPTY
├── subfolder2
| ├── Someclass21.py
| ├── ...
| └── __init__.py <- EMPTY
├── Someclass1.py
├── Someclass2.py
├── ...
└── __init__.py
packagename/__init__.py
看起来像这样:
from packagename.subfolder1.Someclass11 import Someclass11
from packagename.subfolder2.Someclass21 import Someclass21
from packagename.Someclass1 import Someclass1
from packagename.Someclass2 import Someclass2
我自己的项目有这样的结构:
projectname
├── thirdParty
| ├── packagename
| └── ...
├── subfolder2
| └── ...
├── ...
└── main.py
我想在packagename
(以及其他类/函数)中包含来自main.py
的类。
如果我将packagename/__init__.py
更改为:
from projectname.thirdParty.packagename.subfolder1.Someclass11 import Someclass11
from projectname.thirdParty.packagename.subfolder2.Someclass21 import Someclass21
from projectname.thirdParty.packagename.Someclass1 import Someclass1
from projectname.thirdParty.packagename.Someclass2 import Someclass2
是否有导入packagename
而不编辑packagename/__init__.py
并让其他功能从不同位置导入的解决方案?
答案 0 :(得分:0)
您必须拥有thirdParty
中的PYTHONPATH
文件夹。
在Linux / MacOS上:
$ export PYTHONPATH=<path_to_projectname>/thirdParty
在Windows上: 见this answer。
设置新python路径的另一种方法是在main.py
中添加以下内容,之前导入thirdParty
包:
import sys
import os
base_dir = os.path.dirname((os.path.abspath(__file__)))
thirdParty_dir = os.path.join(base_dir, 'thirdParty')
sys.path.insert(0, thirdParty_dir)
尽管这个片段可能依赖于一点版本(我在python 3.5中测试过它)。