wig*_*ing 1 python ipython python-3.x
我有一个 Python 项目的文件夹结构,如下所示:
proj/
??? cars
? ??? honda.py
? ??? volvo.py
??? trucks
? ??? chevy.py
? ??? ford.py
??? main.py
??? params.py
Run Code Online (Sandbox Code Playgroud)
内容params.py:
""" Parameters used by other files. """
serial = '12-411-7843'
Run Code Online (Sandbox Code Playgroud)
内容honda.py:
""" Information about Honda car. """
from params import serial
year = 1988
s = serial
print('year is', year)
print('serial is', s)
Run Code Online (Sandbox Code Playgroud)
在proj/文件夹中,我可以使用 iPython 运行脚本:
$ cd path/to/proj/
$ ipython
In [1]: run cars/honda.py
year is 1988
serial is 12-411-7843
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用该python命令运行脚本,则会出现以下模块未找到错误params.py:
$ cd path/to/proj/
$ python cars/honda.py
Traceback (most recent call last):
File "cars/honda.py", line 5, in <module>
from params import serial
ModuleNotFoundError: No module named 'params'
Run Code Online (Sandbox Code Playgroud)
为什么使用python命令的方法不起作用?
注意 - 上面的示例是在 Mac 上使用 Anaconda Python 发行版执行的。在 Windows 与 Linux 机器上运行时,有一个关于导入问题的类似问题。但是,我的问题与python在 Mac 上使用 iPython vs运行脚本有关。
上面from params import serial插入:
import sys
[sys.path.append(i) for i in ['.', '..']]
Run Code Online (Sandbox Code Playgroud)
这会将您当前的工作目录及其父目录添加到您可以从中导入的位置列表中。
proj如果你希望能够导入params到cars/honda.py从那些家长目录运行脚本时project,您可以使用以下命令:
import sys
import os
from functools import reduce
# allow imports when running script from within project dir
[sys.path.append(i) for i in ['.', '..']]
# allow imports when running script from project dir parent dirs
l = []
script_path = os.path.split(sys.argv[0])
for i in range(len(script_path)):
sys.path.append( reduce(os.path.join, script_path[:i+1]) )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3028 次 |
| 最近记录: |