
目前有一个项目,下面有两个子项目01和02。这两个项目要共享一部分代码,因此我把共用的代码抽出来写成一个包。整个项目的目录结构像是这样的
/my_proj /sub_proj01 proj_file01.py /sub_proj02 proj_file02.py /my_package __init__.py module01.py module02.py 我如何在proj_file01.py和proj_file02.py中通过类似
import my_package.module01 from my_package.module02 import * 来引用module01.py和module02.py里面的功能呢?往sys.path里面加路径?,感觉不太对啊。而且my_package也在开发中,所以不能把它分离出来放到python的default path里面。
有其他更合理的方案吗?谢谢大家了。
2 9hills 2015-02-10 17:44:48 +08:00 设置环境变量 PYTHONPATH 如果因为不想全局应用,可以试试这个东西 https://github.com/kennethreitz/autoenv 对某个dir单独设置env,cd进去的时候自动应用。。 |
3 rikeinei 2015-02-10 18:06:38 +08:00 import ..my_package.module01 |
5 tabris17 2015-02-10 18:21:13 +08:00 setuptools |
6 endoffight 2015-02-10 18:28:26 +08:00 via Android 可以通过拓展sys.path,将包的路径加入即可! |
7 invite 2015-02-10 18:58:06 +08:00 site-packages 下面放个 .pth 文件好像可以。 |
8 kaneg 2015-02-10 20:10:32 +08:00 via iPhone 如果用pycharm,直接把各个项目根目录设置为source即可 |
9 binux 2015-02-10 20:17:48 +08:00 你这样组织目录是不对的,你只是把 sub_proj01 放到了 my_proj 目录下面,而不是 my_proj.sub_proj01 sub_proj01 和 my_package 没有任何关联 如果你不想 install my_package 到 site-package 的话,你需要将 my_proj 变成模块,然后 sub_proj01 就能用 import my_proj.my_package 了 |
10 ryanking8215 2015-02-10 21:25:32 +08:00 使用相对导入: 例如是proj_file01.py文件,则from .. import mypackage or from ..mypackage import module01,看你需要了。 相对导入有缺点,if __name__=='__main__': 不支持相对导入;执行需要通过python -m xxx, 而且要在合适的目录下,否则会报找不到‘top level'的package. |
12 KyL OP @ryanking8215 请问相对导入PY2中有这个功能吗?我得到错误: from .. import pkgs ValueError: Attempted relative import in non-package |
13 Sylv 2015-02-11 13:33:29 +08:00 via iPhone 应该是你要先把你的项目变成 package,在目录里加入 __init__.py 文件 |
14 rikeinei 2015-02-13 12:17:41 +08:00 @KyL Python 的模块包,如果是放在文件夹中,则需要在目录里加入 __init__.py 文件 如果只是一个文件,import sys sys.path.append(文件的绝对路径) 当前强烈不推荐下面的。 |