考虑这个简单的文件夹结构:
root
Package1
x.py
y.py
Package2
z.py
Examples
main.py
现在我们的要求是:
- x.py需要导入y.py
- z.py需要导入y.py
- main.py需要导入y.py和z.py
下面是有效的:
x.py
import y
def x():
y()
y.py
def y():
pass
z.py
import package1.y as y
def z():
y.y()
main.py
import sys
from os import path
sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) )
import package1.y as y
import package2.z as z
y.y()
z.z()
问题:
- 这是在 Python 3 中设置导入的最佳且推荐的方法吗?
- 我真的不喜欢改变
sys.path
in main
因为它强烈约束关于包裹位置的假设inside代码文件。有什么办法解决这个问题吗?
- 我也很不喜欢多余的东西
as y
参与import package1.y as y
。有什么办法解决这个问题吗?
与往常一样,有两个单独的步骤:
- 您编写的代码针对abstract包的命名空间,其中包含
package1
and package2
(and sys
, os
, etc.),但不是“Examples”,它不是一个包(因为main.py
不是一个模块)。
- You set
sys.path
适当地before您的任何代码都可以运行。如果是您自己的(卸载的)代码,则有你可以放置它的地方,或者您可以编写一个简单的 shell 脚本包装器来设置PYTHONPATH为您python
过程。
所以你的问题的答案是
- In
x.py
你写from . import y
。 (Python 2 支持这一点,3 则需要它。)
- 你如何设置
sys.path
取决于您的包装/环境系统。传统的方法是设置PYTHONPATH
环境变量为python
过程,但还有其他涉及诸如site
module.
-
from package1 import y
是通常只命名事物一次的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)