如果你希望你的庫/應用程序變得更大和易於打包,我不建議將源代碼與測試代碼分開,因爲測試代碼不應該打包在二進制發行版中(egg或輪)。
您可以按照樹形結構:
+-- src/
| +-- main.py
| \-- folder_functions/ # <- Python package
| +-- __init__.py
| \-- function_a.py
\-- tests/
\-- folder_functions/
+-- __init__.py
\-- test_function_a.py
注:根據PEP8,Python包和模塊的名稱應該是「蛇案」(小寫+下劃線)。
src目錄可以避免,如果你有(你應該)一個主包。
正如在其他意見解釋的那樣,setup.pŸ文件應該站在旁邊的SRC和測試文件夾(根級)。
閱讀Python Packaging User Guide
編輯
下一步是創建一個setup.py,例如:
from setuptools import find_packages
from setuptools import setup
setup(
name='Your-App',
version='0.1.0',
author='Your Name',
author_email='[email protected]',
url='URL of your project home page',
description="one line description",
long_description='long description ',
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'License :: OSI Approved :: Python Software Foundation License',
'Operating System :: MacOS :: MacOS X',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX',
'Programming Language :: Python',
'Topic :: Software Development',
],
platforms=["Linux", "Windows", "OS X"],
license="MIT License",
keywords="keywords",
packages=find_packages("src"),
package_dir={'': 'src'},
entry_points={
'console_scripts': [
'cmd_name = main:main',
],
})
一旦你的項目配置,您可以創建一個virtualenv並在裏面安裝你的應用程序:
virtualenv your-app
source your-app/bin/activate
pip install -e .
您可以使用unitests標準模塊運行測試。
要導入您的模塊test_function_a。PY,只是照常進行:
from folder_functions import function_a
創建一個名爲在同一水平上,其中'main.py'是'tests'文件夾,並把所有的測試在那裏。 – orangeInk
@orangelnk我讀到的通常是測試文件夾處於與功能相同的層次或更深層次的功能。主要還是pythonic? – Joe
我不得不承認,在包裝方面我遠非專家,但在99%的時間裏,當我看到一個包時,我看到'setup.py'所在的同一級別的'tests'文件夾意味着高於所有實際代碼的1個等級)。 – orangeInk