Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一项目的不同子目录中导入python模块和包_Python_Structure_Project_Project Structure_Project Structuring - Fatal编程技术网

在同一项目的不同子目录中导入python模块和包

在同一项目的不同子目录中导入python模块和包,python,structure,project,project-structure,project-structuring,Python,Structure,Project,Project Structure,Project Structuring,我想找出一种最干净、最好是自包含的方式来在脚本中使用我的包,这些脚本与包本身位于不同的目录中 示例问题如下所示: lib中的模块既需要导入,也需要作为脚本运行 我的项目目录如下,我有两个问题: 在lib/api.py中,我想在调用或导入api.py时正确读取data\u文件/key.txt 在testing_script.py中,我想导入并使用lib/get_data.py 我似乎找不到一个干净的方法来做这件事,这是否意味着我的项目是以一种非python的方式构建的 谢谢你的帮助 my-proj

我想找出一种最干净、最好是自包含的方式来在脚本中使用我的包,这些脚本与包本身位于不同的目录中

示例问题如下所示:

lib
中的模块既需要导入,也需要作为脚本运行

我的项目目录如下,我有两个问题:

  • lib/api.py
    中,我想在调用或导入
    api.py
    时正确读取
    data\u文件/key.txt
  • testing_script.py
    中,我想导入并使用
    lib/get_data.py
  • 我似乎找不到一个干净的方法来做这件事,这是否意味着我的项目是以一种非python的方式构建的

    谢谢你的帮助

    my-project-git
    ├── LICENSE
    ├── README.md
    ├─── my_project
    │   ├── data_files
    │   │   ├── key.txt
    │   │   ├── mappings.csv
    │   ├── lib
    │   │   ├── __init__.py
    │   │   ├── api.py
    │   │   └── get_data.py
    │   └── test
    │       ├── __init__.py
    │       └── testing_script.py
    ├── requirements.txt
    └── setup.py
    

    据我所知,没有一种类似于python的方式来组织你的项目

    这是Kenneth Reitz在2013年推荐的,也是我使用它的方式:

    README.rst
    许可证
    setup.py
    requirements.txt
    sample/__init__.py
    sample/core.py
    示例/helpers.py
    docs/conf.py
    docs/index.rst
    测试/测试_basic.py
    测试/测试_advanced.py
    
    sample
    my_project
    在您的案例中)中,您可以根据自己的喜好进行分类。例如UTIL(通用函数)、数据库(读、写)、视图(用户命令)等。这取决于您的项目

    至于在同一级别调用模块,您应该在顶级层次结构模块的
    \uuuu init\uuuu
    文件中定义它们,在本例中,该模块是
    sample

    例如:

    \uuuu init\uuuu
    在我的项目中

    从sample.core导入_类
    从sample.core导入一个函数
    从sample.core导入任何内容
    
    然后从
    /test/test_basic.py
    执行以下操作:

    从示例导入一个\u类
    #或进口样品
    a=a_Class()#使用core.py中的类
    #或a=sample.a_Class()
    

    看看示例模块存储库:

    我提出了一个答案。PS:
    lib
    通常用于第三方库或C(或其他)语言库。