Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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_Python 3.x_Import - Fatal编程技术网

Python/导入与程序设计

Python/导入与程序设计,python,python-3.x,import,Python,Python 3.x,Import,我正在寻找设计我的程序的解决方案 我的程序由3个模块组成: 班级 功能 其他公用事业 我希望以这种方式构建我的程序: program_folder/ main.py classes_folder/ class_1.py class_2.py functions_folder/ set_of_func_1.py set_of_func_1.py utilities_folder/ set_of_uti

我正在寻找设计我的程序的解决方案

我的程序由3个模块组成:

  • 班级
  • 功能
  • 其他公用事业
我希望以这种方式构建我的程序:

program_folder/
   main.py
   classes_folder/
       class_1.py
       class_2.py
   functions_folder/
       set_of_func_1.py
       set_of_func_1.py
   utilities_folder/
       set_of_utilities_1.py
       set_of_utilities_1.py
我想:

  • «classes_folder»中的任何脚本都可以在中导入任何脚本 «函数\文件夹»
  • «函数_文件夹»中的任何脚本都无法运行 导入«实用工具»文件夹中的任何脚本
  • 所有脚本都是 通常由main.py使用
  • «classes_folder»中的所有脚本, «功能_文件夹»和«实用工具_文件夹»可在工作时进行测试 作为«main»(
    if uuuuuu name_uuuuu==“uuuuuu main_uuuuuu”:
    一些测试)
  • «程序文件夹» 可以在我的计算机中的任何位置(不应该有依赖关系 位于«program_folder»的精确路径上
综上所述,我认为我必须:

  • 更改«classes_folder»中所有脚本的导入搜索路径, «功能文件夹»和«实用工具文件夹»
  • 设定电流工作 所有脚本的«program_folder»目录
我有办法做到吗?

我的想法看起来不错,还是我在那里遇到了一些意想不到的问题?

常见的Python项目结构可能是这样的:

project_name/
  setup.py
  requirements.txt  

  project_name/
    __main__.py

    classes/
      __init__.py
      class1.py
      class2.py

    functions/
      __init__.py
      functions.py

    utils/
      __init__.py
      utils.py
然后,您可以将导入从绝对修改为相对,并使用以下方式运行包:

$ /path/to/project_name> python -m project_name 
请注意,
setup.py
仅当您想在某些解释器下安装软件包时才需要

注意:另请参见下面的评论


可以创建如下所示的骨架项目:

/path/to/project/
  setup.py
  my_project/
    __init__.py
    a/
      __init__.py
    b/
      __init__.py

==> ./my_project/__init__.py <==
print('my_project/__init__.py')

==> ./my_project/a/__init__.py <==
import my_project
print('my_project/a/__init__.py')

==> ./my_project/b/__init__.py <==
import my_project.a
print('my_project/b/__init__.py')

==> ./setup.py <==
from distutils.core import setup
setup(name='my_project',
      version='1.0',
      description='my_project',
      author='author',
      packages=['my_project'])

将类和函数拆分为单独的文件夹是如何常见的?函数与UTIL有什么不同?UTIL似乎保证它们有自己的文件夹?要清楚,通常有这样的布局,而不是将UTIL、FUNC、类等拆分到它们自己的文件夹中。只是抄袭了作者的名字,让想法更清晰。根据子文件夹的喜好和项目的逻辑结构,可以将所需的内容放入子文件夹中。
$ python my_project/b/__init__.py 
my_project/__init__.py
my_project/a/__init__.py
my_project/b/__init__.py