【问题标题】:import a file from another location - python从另一个位置导入文件 - python
【发布时间】:2018-11-06 15:27:37
【问题描述】:

有两个文件夹,每个文件夹都包含一个 python 文件。 例如:first_folder 包含 a.py & second_folder 包含 b.py

我尝试在 a.py 中导入 b.py 但我没有导入错误。

ImportError: 没有名为 b 的模块

请帮我解决这个问题。我也尝试在两个文件夹中创建一个空白的 init.py,但没有成功。

文件夹结构:

/home/user/scripts/

 |
 |--------python_scripts
 |          |
 |          |
 |          |------- a.py
 |
 |--------lib
           |
           |-------b.py

【问题讨论】:

  • 你能提供一个你的文件夹结构的例子吗?
  • 可能这两个文件不在PATH中或者你的工作目录不在正确的位置。
  • 你的文件夹结构是什么,你在哪些文件夹中有什么文件?
  • 第一个文件夹:'python_script',包含 a.py 第二个文件夹:'lib',包含 b.py 两个文件夹都在同一个位置。我在该位置后面的一个文件夹中运行脚本
  • 例如:'scripts'文件夹包含'python_script'和'lib'文件夹。我正在“脚本”位置执行

标签: python python-2.7 module python-import


【解决方案1】:

假设你有这样的文件

.
├── first_folder
│   └── a.py
└── second_folder
    └── b.py

您可以使用abs路径将a.py作为模块导入b.py

import importlib.util

spec = importlib.util.spec_from_file_location('a', 'path/to/first_folder/a.py')

foo = importlib.util.module_from_spec(spec)

spec.loader.exec_module(foo)

print(dir(foo))

还有另一种方便的方式来加载b.py

$ cd path/to/second_folder

$ ln -s path/to/first_folder ./first_folder

并将a.py 导入为普通的python 模块

import a from first_folder

【讨论】:

    【解决方案2】:

    Python 的import 将在python 路径中查找模块(.py 文件)。您可以在 sys.path 变量中查看 python 路径中的内容。

    默认情况下,sys.path 将包含您运行的脚本所在的目录。它还将包括在PYTHONPATH 环境变量中定义的所有内容。

    因此,如果您有两个包含 .py 文件的目录,您可以将两者都放在 python 路径中,或者您可以确保所有源代码都在同一个路径条目下。

    选项 1

    (这个语法取决于你的shell,这里是windows)

    set PYTHONPATH=%PYTHONPATH%;\path\to\second_folder
    
    python \path\to\first_folder\a.py
    

    然后,您可以简单地import b

    选项 2

    在两个目录中创建一个空的__init__.py,并在它们上面的目录中创建一个run.py,这样你就有了:

    root_dir
        run.py
        first_folder
            __init__.py
            a.py
        sedond_folder
            __init__.py
            b.py
    

    run.py 设为您的入口点(运行python run.py),然后您可以使用它们的完整模块名称从任何其他模块导入任何模块:

    import first_folder.a
    import second_folder.b
    

    【讨论】:

    • 谢谢。通过将文件夹附加到“sys.path”,它起作用了
    【解决方案3】:

    如果文件在同一目录中,请键入此

    Import .other_file
    

    【讨论】:

    • 文件在不同的目录
    • 这真的取决于你必须做什么。你能提供确切的文件结构吗?它也可能有助于使用 pycharm。它将帮助您编写更好的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2021-04-17
    • 2017-09-12
    相关资源
    最近更新 更多