如何导入Python文件?
对不起,这肯定是重复的,但我找不到答案。我正在使用Python 3,这是我的应用程序的结构:如何导入Python文件?,python,python-3.x,Python,Python 3.x,对不起,这肯定是重复的,但我找不到答案。我正在使用Python 3,这是我的应用程序的结构: /home common.py australia/ new-south-wales/ fetch.py 我在home/目录中,运行fetch.py。如何从该脚本中的common.py导入函数 我已经设置了fetch.py,如下所示: from common import writeFile 但我得到了以下错误: File "australia/new-south-wal
/home
common.py
australia/
new-south-wales/
fetch.py
我在home/
目录中,运行fetch.py
。如何从该脚本中的common.py
导入函数
我已经设置了fetch.py
,如下所示:
from common import writeFile
但我得到了以下错误:
File "australia/new-south-wales/fetch.py", line 8, in <module>
from common import writeFile
ModuleNotFoundError: No module named 'common'
文件“australia/new-south-wales/fetch.py”,第8行,在
从通用导入写入文件
ModuleNotFoundError:没有名为“common”的模块
如果我只是从公共导入writeFile执行python-c“
,我看不到错误
解释器不应该吗?在导入之前,需要导入的目录必须在该文件夹中有文件
\uuuu init\uuuuuuuuuuupy
#解决方案1(在运行时导入)
要在“运行时”以已知名称导入特定Python文件,请执行以下操作:
import os
import sys
script_dir = "/path/to/your/code/directory"
# Add the absolute directory path containing your
# module to the Python path
sys.path.append(os.path.abspath(script_dir))
import filename
#解决方案2(将文件添加到其中一个python库)
另外,由于您有一个公共库,您可以运行
>>> import sys
>>> print sys.path
并查看您可以在每个项目中放置代码和使用哪些目录。您可以将公用包移动到此目录之一,并将其视为普通包。例如,对于common.py,如果您将其放置在此目录之一的根目录中,则可以像导入公用包一样导入
#解决方案3(使用相对导入)
然后转到父目录并运行
python -m home.australia.new-south-wales.fetch
根据描述,我假设您没有将其作为完整的python包运行,只是作为单独的文件运行 您可以使用完整的模块。这意味着将空的
\uuuuu init\uuuuu.py
添加到包含代码的目录中。您还必须将新南威尔士
的名称更改为新南威尔士
,因为它需要是一个有效的模块名称
假设home
是你的应用程序的名称,你应该得到:
home/
__init__.py
common.py
australia/
__init__.py
new_south_wales/
__init__.py
fetch.py
下一步,你需要为你的应用程序准备一个启动脚本——这意味着要么简单一些,比如:
#!/usr/bin/env python
from australia.new_south_wales import fetch
fetch.your_main_function()
或者,您可以添加带有完整软件包说明的setup.py
。如果指定,脚本将自动创建
现在,您正在包的上下文中启动代码,fetch.py
可以执行以下操作:
from ..common import writeFile
您缺少模块的
\uuuu init\uuuu.py
。谢谢。这看起来很不雅观-有没有更好的方法在不同子目录中的脚本之间共享公共函数?(另外,我猜你的意思是\uu init\uuuuuuuuuuuuuuupy
)我在home/
中添加了一个空的\uuuuuu init\uuuuuuuuuuuuuuuuuuuupy
文件,并且在fetch.py
中添加了scriptpath=“../common.py”
。我在尝试从home/
运行fetch.py
时仍然遇到错误。是的,我的意思是\uuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
;我也用这种方式;将scriptpath更改为。/../“
谢谢,按照您的建议进行了更改,但仍然得到模块NotFoundError:没有名为“common”的模块
,这也不符合PEP8-肯定有更好的方法吗?
from ..common import writeFile