从另一个位置导入文件 - python

时间:2018-05-28 05:18:34

标签: python python-2.7 module python-import

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

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

ImportError:没有名为b的模块

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

文件夹结构:

/ home / user / scripts /

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass>com.myapp.internal.MainLauncher</mainClass>
            <addResources>true</addResources>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

3 个答案:

答案 0 :(得分:0)

如果文件位于同一目录中,请输入此

Import .other_file

答案 1 :(得分:0)

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

答案 2 :(得分:0)

假设你有这样的文件

.
├── 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