Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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_Pip_Anaconda - Fatal编程技术网

python库目录结构来分隔代码

python库目录结构来分隔代码,python,python-3.x,pip,anaconda,Python,Python 3.x,Pip,Anaconda,我希望具有以下目录结构: project_name(不幸的是,我没有想到将git回购命名为其他名称) | ... | |--项目名称 ||--uuu init_uuuuuuuuuuuuuuuuuy.py ||——模块1 || |--uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu || |--pyfile1.py ||#包含从class2和class1提取的class1 ||——模块2 || |--uuu init

我希望具有以下目录结构:

project_name(不幸的是,我没有想到将git回购命名为其他名称)
|  ... 
|
|--项目名称
||--uuu init_uuuuuuuuuuuuuuuuuy.py
||——模块1
|| |--uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
|| |--pyfile1.py
||#包含从class2和class1提取的class1
||——模块2
|| |--uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
|| |--pyfile2.py
||#包含类2
||——模块3
||--uuu init_uuuuuuuuuuuuuuuuuy.py
||--pyfile3.py
|#包含类3
|--测验
||--test1
...
如上所述,当我把它扔到github和pip从github安装它时,我注意到子模块是单独安装的,而不是在项目名称下一起安装的

我想简洁地访问类1,而类1从类2和3中提取。目前,我相信他们正在通过我的tests目录中包含的pytest进行测试,所以我让他们互相调用。即

类中的
#
从项目_name.module2.pyfile2导入类2
从项目_name.module3.pyfile3导入类3
#在测试1中
从项目_name.module1.pyfile1导入类1
我希望能够从project_name.module1 import class1调用say class1 like
,或者在此结构下必须使用project_name.module1.pyfile1 import class1
?我知道,这可能有点可笑,但我已经尝试了一些组织迭代,即删除子模块结构,并将它们全部放在project_name下,使用一个
\uuuuu init\uuuuuuuuuuuuy.py
。但我现在需要某种分离的关注点,所以我想知道如何正确地做到这一点

我想是多个
\uuu init\uuuuuuuuuupy
导致单独的模块与我的
setup.py
一起安装,它正在查看
项目名称
目录,而不是只安装
项目名称
目录,然后我可以像测试一样访问子模块:


导入设置工具
进口稀土
导入操作系统路径
导入系统
以open(“README.md”、“r”)作为fh:
long_description=fh.read()
def read(文件名):
返回open(os.path.join(os.path.dirname(_文件,文件名)).read()
version=re.search(r'^\\\\\\\'''.].[\''''.]*)[\'''''.]',读取('project\\\\\\\'/\\\\\\'''.py'),re.MULTILINE)。组(1)
安装要求=['pandas>=1.0.0']
包括_包=['project_one']
测试要求=['pytest>4.0','pytest pylint']
安装程序要求=['pytest-runner','pytest-pylint']
setuptools.setup(
name=“项目一”
,version=version
,license='license.txt'
,author=作者
,author_email=电子邮件
,description=说明
,long_description=long_description
,long\u description\u content\u type=“text/markdown”
,url=url
,packages=setuptools.find_packages('project_name',exclude=['tests']))
,分类器=[
“发展状况:3-阿尔法”,
'目标受众::开发者',
“主题::软件开发::构建工具”,
“许可证::OSI已批准::麻省理工许可证”,
'编程语言::Python::3.6',
'编程语言::Python::3.7',
'编程语言::Python::3.8',
]
,python_需要='>3.0,!=3.1.*,!=3.2.*,!=3.3.*'
,install_requires=install_requires
,tests\u require=tests\u require
,setup\u requires=setup\u requires
#,extras_require={'pandas':['pandas>=0.14.0']}
)
那么,我该如何停止子目录的安装,让它安装project_name目录,并正确地构造目录和代码

另外,我的子目录
\uuuuu init\uuuuuu.py
是空的。
项目名称
\uuuuuu init\uuuuuuuuuu.py
包含以下内容,但如果未安装
项目名称
目录,则该目录无效:

#-*-编码:utf-8-*-
#Python代码的PEP8风格指南。
# https://www.python.org/dev/peps/pep-0008/
导入日志记录
#少校
__版本='0.7.0'
__作者\='name'
from.module1.pyfile1导入类1
从.module2.pyfile2导入类2
从.module1.pyfile3导入类3
#设置默认日志处理程序以避免出现“未找到处理程序”警告。
试试:#Python 2.7+
从日志导入NullHandler
除恐怖外:
类NullHandler(logging.Handler):
“”“用于将来的错误处理目的”“”
def排放(自我,记录):
通过
logging.getLogger(_名称__).addHandler(NullHandler())

您想要的结构看起来很奇怪,因为文件名只增加了模块名的混淆。如果每个模块都按照类命名,那么它看起来会更自然(并按照您的预期工作)

.
└── project_name
    ├── __init__.py
    ├── class1.py
    ├── class2.py
    └── class3.py
随着模块变得越来越复杂,您可能希望在内部将其分解为文件,但不更改访问它们的任何代码。为此,您可以使用
\uuuu init\uuuuuuuuuuuupy
方便地“发布”内容(并保持调用协议不变),因此:

class1/\uuuu init\uuuu.py
中,您可以将
从.class1导入
,这样应用程序的其余部分就不需要更改其导入

使用这种方法,您可以简单地从一个模块(文件)开始,并在开发过程中分离关注点时将其扩展为包树


对于您的设置,您正在project_name中查找包,因此需要从find_packages中删除第一个参数。

要清除一些命名:Python文件是一个模块,带有
\uuu init\uuuuuuupy.py的文件夹是一个包。感谢您的更正,这非常有帮助。从这些方面讲,这三个包更有意义es正在安装在站点包中。感谢您的反馈。我已经按照建议进行了操作,我相信我对这一点理解得更好。因此,我从find_包中删除了“project_one”,并断章取义地说“project_one/project_one”不存在。此外,“模块”1、2和3正在单独安装
.
└── project_name
    ├── __init__.py
    ├── class1
    │   ├── __init__.py
    │   ├── class1.py
    │   └── utils.py
    ├── class2.py
    └── class3.py