从另一个目录运行Python脚本

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (142)

首先,想象一下以下文件结构:

project-dir
|_ 
   package1
   |_ 
      __init__.py
      module1.py
      module2.py

以下脚本内容:

module2.py:

def func_module2():
    print('func_module2 run')

module1.py:

from package1 import module2

module2.func_module2()

从project-dir执行时,以下命令会创建错误:

python package1/module1.py

错误:

Traceback (most recent call last):
  File "./package1/module1.py", line 1, in <module>
    from package1 import module2
ImportError: No module named 'package1'

为什么会发生这种情况?如何从另一个目录运行Python脚本?

Python 3.5.2

提问于
用户回答回答于

module2module1在同一名称空间下。所以它必须是:

# module1.py
import module2

module2.func_module2()

from package1 import module2 仅在以下上下文/命名空间中有效:

例如:

# test.py
from package1 import module2

module2.func_module2()
用户回答回答于

您的问题似乎是,module1.pymodule2.py在同一个封装中两个生活。从module1.py你不会找到module2.py另一个包。而是尝试:

import module2

module2.func_module()

试着我得到:

> python package1/module1.py
func_module2 run

但是,如果您希望它也可以作为包使用(或使用较新版本的python),则必须使用它

from . import module2

module2.func_module()

但这将python package1/module1.py无法正常工作,因为它不会作为包的一部分运行。相反,你可以使用

> python -m package1.module1
func_module2 run

扫码关注云+社区

领取腾讯云代金券