从特定文件夹导入模块

3
我有一个名为 Script 的文件夹,里面有一个叫做 temp.py 的脚本。我的 temp 脚本从子文件夹 lib 中导入模块。 Lib 文件夹内包含一个空的 __init__.py 和我的 parent_computer_test.py 脚本。
在我的 temp.py 脚本中有以下代码:
import lib.parent_computer_test as parent_computer_test
parent_computer_test.mainChunk()
parent_computer_test.splitChunks()

我成功地从子文件夹导入了模块,没有遇到任何大问题。

这个工作流/脚本运行良好,但由于特定原因,我的lib文件夹必须在计算机上的其他位置。这里有一个很长的故事,但它必须是那样。

长话短说,我希望我的/Script文件夹中的temp.py可以通过parent_computer_test.py从文件夹lib(或任何其他名称)导入模块,但同时该文件夹不是/Script的子文件夹 - 因此它在计算机上的其他位置。它可以是C:/development/...或其他什么。

因此,我的问题是如何从特定文件夹导入模块?


1>>>>>>>>导入 os,sys 2>>>>>>>>lib_path = os.path.abspath(os.path.join('..', '..', '..', 'lib')) 3>>>>>>>>sys.path.append(lib_path) 4>>>>>>>>导入 mymodule - Virbhadrasinh
重复问题:https://dev59.com/0XVC5IYBdhLWcg3wfhGL - Virbhadrasinh
请参见此问题 - luator
@Virbhadrasinh:这不是重复的问题,因为 OP 不想从相对路径导入。 - luator
@luator 但是在这个问题中,答案也与您相关。 - Virbhadrasinh
3个回答

7

将lib文件夹的路径添加到SYS PATH环境变量中。这样就可以在任何地方导入它。

import os, sys
lib_path = os.path.abspath(os.path.join('..', '..', '..', 'lib'))
sys.path.append(lib_path)
import mymodule

5
import imp
yourModule = imp.load_source('yourModuleName', '/path/to/yourModule.py')
foo = yourModule.YourFunction("You", "get", "the", "idea.")

我知道这是一个特殊情况,但总的来说,我会避免使用绝对路径。如果你移动文件位置,使用绝对路径可能会导致问题变得棘手。我只会在需要丢弃的脚本或不太会改变的系统上使用它。

编辑:Aswin的答案是更好的长期解决方案。


谢谢!它像魔法一样运行。我知道这不是最佳实践,但正如之前所说...在这种情况下,这是唯一的方案。 - Excalibur
很高兴能帮忙。只是要确保你意识到了风险。 - Luke
谢谢您指出这一点。我是一个完全的初学者,所以额外的信息总是受欢迎的。 - Excalibur

1

你需要使用 sys.path.append("路径")。但仅需使用一次。然后尝试导入 "my_module"。应该没问题。 如果要删除附加的路径,可以使用 sys.path.remove("路径")。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接