我是Python的新手,我正在开始一个迷你项目,但我对如何以“Python方式”组织文件夹有一些疑问。
我在开发环境中使用PyDev
,当我创建一个新项目时,会创建一个名为src
的文件夹
+ src
现在,在PyDev
,我可以创建Pydev Module
和PyDev Package
我需要按以下方式组织我的项目:
+ Indicators
- Moving_averages.py
- Stochastics.py
+ Strategies
- Moving_averages_cross.py
- example.py
如何根据模块和包进行组织? Modules and Packages是什么意思?
最诚挚的问候,
答案 0 :(得分:42)
Package基本上是一个文件夹,下面有__init__.py
文件,通常是一些模块,其中Module是*.py
文件。
它主要与import
有关。如果您将__init__.py
添加到指标,则可以使用:
from Indicators.Stochastics import *
或
from Indicators import Stochastics
顺便说一句,我建议将模块/包名称保持为小写。它不会影响功能,但它更“pythonic”。
答案 1 :(得分:36)
从文件系统的角度来看,module
是以.py
结尾的文件,而package
是包含module
和(嵌套){{1}的文件夹再次。如果文件夹包含package
文件,则Python会将其识别为package
。
像这样的文件结构
__init__.py
定义some/
__init__.py
foofoo.py
thing/
__init__.py
barbar.py
package
,其中包含some
module
和嵌套包foofoo
,其中包含thing
模块。但是,在使用包和模块时,您并没有真正区分这两种类型:
barbar
在选择命名包/模块时请遵循PEP8(即使用小写名称)。
答案 2 :(得分:26)
目录结构
.
|-- bin
| `-- my_program
|-- docs
| `-- doc.txt
|-- my_program
| |-- data
| | `-- some_data.html
| |-- __init__.py
| |-- submodule
| | `-- __init__.py
| |-- helpers.py
|-- tests
| |-- __init__.py
| |-- test_helpers.py
|-- Makefile
|-- CHANGES.txt
|-- LICENSE.txt
|-- README.md
|-- requirements-dev.txt
|-- requirements.txt
`-- setup.py
cat Makefile
PYTHON=`which python`
NAME=`python setup.py --name`
all: check test source deb
init:
pip install -r requirements.txt --use-mirrors
dist: source deb
source:
$(PYTHON) setup.py sdist
deb:
$(PYTHON) setup.py --command-packages=stdeb.command bdist_deb
rpm:
$(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall
test:
unit2 discover -s tests -t .
python -mpytest weasyprint
check:
find . -name \*.py | grep -v "^test_" | xargs pylint --errors-only --reports=n
# pep8
# pyntch
# pyflakes
# pychecker
# pymetrics
clean:
$(PYTHON) setup.py clean
rm -rf build/ MANIFEST dist build my_program.egg-info deb_dist
find . -name '*.pyc' -delete
答案 3 :(得分:13)
您可能想要查看modern-package-template库。它提供了一种为项目设置非常好的基本布局的方法,它可以引导您完成一些问题并尝试帮助您获得能够相当容易地分发的内容。
答案 4 :(得分:7)
在决定项目结构之前,最好先问问自己项目的目的是什么。这会是一次性分析吗?你想调查的玩具概念?您打算分发的完整项目?您希望用于构建项目的工作量将有所不同。
如果您想构建项目以便稍后分发它,并且它可以扩展到许多模块,我推荐以下结构:
projectname
├── MANIFEST.in
├── setup.py
├── README
├── .gitignore
├── .git
├── projectname_env
└── projectname
├── __init__.py
├── subpackageone
│ ├── __init__.py
│ ├── second_module.py
│ ├── tests
│ │ └── test_second_module.py
│ └── models
│ └── model1
├── first_module.py
└── tests
└── test_second_module.py
我喜欢这个结构are in my blog post的详细原因,但基本要点是层次结构较低级projectname
目录包含您的实际项目。除此之外,还有所有帮助管理(git)和打包(setup.py,MANIFEST.in)的工具。
答案 5 :(得分:4)
包是一个__init__.py
的目录。与目录的不同之处在于您可以导入它。
本身没有“Python方式”,但您会发现将所有模块放在一个包含与项目相关名称的包中是个好主意。
另外,要遵循Python样式指南PEP8,包和模块名称应全部小写。因此,如果我们假设该项目被称为“Botond Statistics”,那么您的结构将是这样的:
botondstats/
indicators/
moving_averages.py
stochastics.py
strategies/
moving_averages_cross.py
example.py
然后您可以通过
找到Stochastics类from botondstats.indicators.stochastics.Stochastics
(有多种方法可以保持结构但缩短进口时间,但这是另一个问题)。
如果您愿意,可以将此结构放在src/
下,但这不是必需的。我从来没有做。
相反,我有一个主目录:
BotondStatistics/
docs/
botonstats/ # the above structure
setup.py # Distutils/distribute configuration for packaging.
在这个目录中我通常也有一个virtualenv所以我实际上也有bin / lib / et al。开发通常通过运行
来完成./bin/python setup.py tests
我使用Distrubute测试运行器来运行测试。
我就是这样做的。 : - )
答案 6 :(得分:3)
尝试python_boilerplate_template
:
答案 7 :(得分:1)
audreyr
~/.cookiecutterrc
项目包括几个Python项目模板:
该软件包使用单个PyPI
文件以Python,Java,JS和其他语言创建自定义项目模板。
例如,与CPPUNIT_ASSERT(condition);
兼容的Python模板: