从不是子文件夹的另一个文件夹导入python文件

iii

我想要的是

所以我正在使用Visual Studio代码和Python 3.7.0,而我只是想将另一个文件夹中的另一个python文件导入到我的python文件中


细节

这是我的文件夹结构

root/
    dir1/
        data.txt
        task11.py
        task12.py
    dir2/
        data.txt
        task21.py
        task22.py
    Helpers/
        FileHelper/
            ReadHelper.py

所以一个简短的解释:

  • 我在每个“任务”文件中使用相同的功能
  • 我没有在每个“任务”文件中放置函数,而是在函数存在的地方创建了一个帮助文件。
  • 我想将帮助文件“ ReadHelper.py”导入到我的任务文件中

我尝试过的

例如在文件task11.py中:

  • from Helpers.FileHelper.ReadHelper import *
  • import os, sys
    parentPath = os.path.abspath("../../")
    if parentPath not in sys.path:
        sys.path.insert(0, parentPath)
    from Helpers.FileHelper.ReadHelper import *
    
  • import os, sys
    sys.path.append('../../')
    from Helpers.FileHelper.ReadHelper import *
    

上述解决方案均无效,因为我总是会遇到以下错误: ModuleNotFoundError: No module named 'Helpers'

我也尝试过:

  • from ..Helpers.FileHelper.ReadHelper import *

但这最终会导致错误: ValueError: attempted relative import beyond top-level package

那么如何将文件导入ReadHelper.py到任务文件中呢?


聚苯乙烯

对此也有一些类似的问题,但是它们确实很老,答案对我没有帮助。


更新1

Visual Studio代码中有一个选项,vscode python命令如果我使用此导入运行此命令,from Helpers.FileHelper import ReadHelper则不会生成任何错误,并且代码可以完美执行。

缺点是此交互式窗口启动缓慢,无法处理输入。

我也尝试了@Omni的答案:

$> python -m root.dir1.task11

而且有效!但正如他所说,这有一个缺点,那就是输入终端的速度很慢。

因此,我尝试在Visual Studio Code中创建一个任务,该任务可以为我当前所在的文件执行上述shell命令,但未成功。

您知道如何在vscode中创建任务以运行上述命令吗?


我还尝试__init__.py在每个目录下添加-files,以便将它们视为软件包Python3教程-6.4模块软件包但这并没有帮助,并且发生了相同的错误。


更新2

我想出了一种方法,使拥有这样的文件夹结构变得非常容易,并使导入在终端中正常工作。

基本上我所做的是:

  • 创建了一个pyhton脚本
  • 在Visual Studio代码中创建了一个任务

有了这个,我现在只需按即可运行带有导入的python文件cmd + shift + B


说明

视觉工作室任务:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run python file",
            "type": "shell",
            "command": "python3 /PATH_TO_ROOT_FOLDER/run_python_file.py ${file}",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new",
                "focus": true
            }
        }
    ]
}

我们要重点关注的部分是这一部分:

"command": "python3 /PATH_TO_ROOT_FOLDER/run_python_file.py ${file}",

  • 此部分运行我在根文件夹中创建的新python文件,并将活动文件的路径作为参数传递

python脚本:

import os, sys

# This is a argument given trough a shell command
PATH_TO_MODULE_TO_RUN = sys.argv[1]

ROOT_FOLDER = "root/"

def run_module_gotten_from_shell():
    # Here I take only the part of the path that is needed
    relative_path_to_file = PATH_TO_MODULE_TO_RUN.split(ROOT_FOLDER)[1]

    # Creating the shell command I want to run
    shell_command = createShellCommand(relative_path_to_file)

    os.system(shell_command)


# Returning "python3 -m PATH.TO.MODULE"
def createShellCommand(relative_path_to_file):
    part1 = "python3"
    part2 = "-m"

    # Here I change the string "dir1/task11.py" => "dir1.task11"
    part3 = relative_path_to_file.replace("/", ".")[:-3]

    shell_command = "{:s} {:s} {:s}".format(part1, part2, part3)
    return shell_command

run_module_gotten_from_shell()
  • 该python脚本获取活动文件的路径作为参数
  • 然后,它创建路径的shell命令(shell命令就像@kasper-keinänen的答案)
  • 然后运行该shell命令

通过这些修改,我可以运行根目录内的任何文件,并从根目录内的任何文件导入。

而且我可以只按cmd + shift + B

卡斯珀·凯纳嫩

您可以尝试使用-m允许使用Python模块命名空间docs.python.org定位模块选项运行脚本

如果运行task11.py脚本,则:

$ python3 -m dir1.task11 

然后在task11.py中执行如下导入:

from Helpers.FileHelper.ReadHelper import *

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个文件夹导入功能

来自分类Dev

从另一个文件夹导入功能

来自分类Dev

从另一个文件夹导入功能

来自分类Dev

从子文件夹导入主文件(不是另一个模块)

来自分类Dev

在另一个文件夹中创建相同的子文件夹

来自分类Dev

如何从Eclipse的另一个文件夹中的一个文件夹导入protobuf文件?

来自分类Dev

如何从另一个文件夹中的文件导入python类?

来自分类Dev

VSCode的Python linter认为从文件夹中另一个文件的导入是错误的

来自分类Dev

如何从另一个文件夹中的文件导入python类?

来自分类Dev

Python 3 模块从另一个文件夹导入错误

来自分类Dev

通配符子域到另一个子文件夹中的子文件夹

来自分类Dev

将文件列表从目录+子文件夹复制到另一个文件夹

来自分类Dev

将特定子文件夹中的文件移动到另一个子文件夹

来自分类Dev

如何确定另一个文件夹中存在的文件或文件夹?

来自分类Dev

如何在一个文件夹中运行python程序以及如何从另一个文件夹导入和运行python程序

来自分类Dev

htaccess:将子文件夹重定向到另一个子文件夹

来自分类Dev

如何将文件从文件夹和子文件夹复制到R中的另一个文件夹?

来自分类Dev

合并到另一个文件夹时保持子子文件夹结构 [重复的文件夹名称将存在]

来自分类Dev

将整个文件夹从其父文件夹移动到另一个文件夹

来自分类Dev

将子文件夹的内容复制到另一个文件夹

来自分类Dev

IIS URL将子文件夹重写为另一个文件夹名称

来自分类Dev

将文件夹和子文件夹移动到另一个路径

来自分类Dev

如何使用Python处理从一个子文件夹到每个目录中另一个子文件夹的文件?

来自分类Dev

将文件夹列表复制到另一个文件夹?

来自分类Dev

使用sudo将文件夹移动到另一个文件夹

来自分类Dev

当文件夹是另一个PHP应用程序的子文件夹时,隐藏codeigniter文件夹名称

来自分类Dev

当文件夹是另一个PHP应用程序的子文件夹时,隐藏codeigniter文件夹名称

来自分类Dev

从另一个文件夹导入Python文件时(Wing IDE)无法获得建议

来自分类Dev

从另一个文件夹运行Java

Related 相关文章

  1. 1

    从另一个文件夹导入功能

  2. 2

    从另一个文件夹导入功能

  3. 3

    从另一个文件夹导入功能

  4. 4

    从子文件夹导入主文件(不是另一个模块)

  5. 5

    在另一个文件夹中创建相同的子文件夹

  6. 6

    如何从Eclipse的另一个文件夹中的一个文件夹导入protobuf文件?

  7. 7

    如何从另一个文件夹中的文件导入python类?

  8. 8

    VSCode的Python linter认为从文件夹中另一个文件的导入是错误的

  9. 9

    如何从另一个文件夹中的文件导入python类?

  10. 10

    Python 3 模块从另一个文件夹导入错误

  11. 11

    通配符子域到另一个子文件夹中的子文件夹

  12. 12

    将文件列表从目录+子文件夹复制到另一个文件夹

  13. 13

    将特定子文件夹中的文件移动到另一个子文件夹

  14. 14

    如何确定另一个文件夹中存在的文件或文件夹?

  15. 15

    如何在一个文件夹中运行python程序以及如何从另一个文件夹导入和运行python程序

  16. 16

    htaccess:将子文件夹重定向到另一个子文件夹

  17. 17

    如何将文件从文件夹和子文件夹复制到R中的另一个文件夹?

  18. 18

    合并到另一个文件夹时保持子子文件夹结构 [重复的文件夹名称将存在]

  19. 19

    将整个文件夹从其父文件夹移动到另一个文件夹

  20. 20

    将子文件夹的内容复制到另一个文件夹

  21. 21

    IIS URL将子文件夹重写为另一个文件夹名称

  22. 22

    将文件夹和子文件夹移动到另一个路径

  23. 23

    如何使用Python处理从一个子文件夹到每个目录中另一个子文件夹的文件?

  24. 24

    将文件夹列表复制到另一个文件夹?

  25. 25

    使用sudo将文件夹移动到另一个文件夹

  26. 26

    当文件夹是另一个PHP应用程序的子文件夹时,隐藏codeigniter文件夹名称

  27. 27

    当文件夹是另一个PHP应用程序的子文件夹时,隐藏codeigniter文件夹名称

  28. 28

    从另一个文件夹导入Python文件时(Wing IDE)无法获得建议

  29. 29

    从另一个文件夹运行Java

热门标签

归档