【问题标题】:Importing python libraries from outside directory从外部目录导入 python 库
【发布时间】:2020-02-27 01:30:10
【问题描述】:

我正在尝试导入已开发的 python 文件。最初,当所有文件都在同一个目录中时,我对它们没有任何问题。但是,我决定将项目拆分到专用目录。之后,我无法再导入文件。

我的文件结构类似如下:

dirFoo\
    mainFoo1.py
dirFoo\
    mainFoo2.py
dirFooCommon\
    commonFoo.py
    commonFoo2.py

最初,我试图更改 mainFoo1.py 的导入路径并执行以下操作: 来自dirFooCommon import commonFoo。但是,这种方法给了我以下错误: ModuleNotFoundError: 没有名为“common”的模块。

除此之外,我尝试使用imp.load_source,这似乎有效。不幸的是,这会产生额外的问题。例如,如果某些 commonFoo.py 库必须包含其他库怎么办?在这种情况下,他们每个人都需要使用绝对项目路径,当我尝试在任何其他地方使用公共库时,这将是一个问题。

您知道我应该怎么做才能将我的公共库包含到我的主要项目中吗?

【问题讨论】:

  • 查看packages
  • 考虑使用 __init__.py 文件将 Python 文件转换为模块,将目录转换为包。 stackoverflow.com/a/4116384/6014095
  • @Kronosfear 我听说在 python > 3.3 中你不再需要执行 init.py 了。另外,我试过了,但出现以下错误: ModuleNotFoundError: No module named 'dirFooCommon'

标签: python class import


【解决方案1】:

您可以使用此文件夹结构,以便正确调用每个包和模块。

dirFoo\  <=== This is a package know 
    __init__.py 
    mainFoo1.py
dirFoo2\  <==== Change the name or you will have namespace issue
    __init__.py
    mainFoo2.py
dirFooCommon\ <=== This is a package know 
    __init__.py
    commonFoo.py
    commonFoo2.py

所以在mainFoo1.py你可以像这样调用commonFoo.py

import sys
sys.path.append("/path/to/dirFooCommon")

from dirFooCommon import commonFoo

要替换sys.path.append,您还可以在PYTHONPATH 中添加文件夹。

【讨论】:

  • 使用 sys.path.append() 需要提供文件的绝对路径还是相对路径?
  • 首选绝对路径
猜你喜欢
  • 2021-03-07
  • 1970-01-01
  • 2020-03-21
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多