1

我想找出最干净且最好是自包含的方式来在与包本身不同的目录中的脚本中使用我的包。

示例问题如下:

需要的模块lib都需要导入,并作为脚本运行。

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

  1. lib/api.py,我想在被调用或导入data_files/key.txt时正确读入api.py
  2. 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
4

1 回答 1

1

据我所知,没有一种 Python 的方式来构建您的项目。

这是 Kenneth Reitz 在 2013 年推荐的,也是我使用它的方式:https ://www.kennethreitz.org/essays/repository-structure-and-python 。

README.rst
LICENSE
setup.py
requirements.txt
sample/__init__.py
sample/core.py
sample/helpers.py
docs/conf.py
docs/index.rst
tests/test_basic.py
tests/test_advanced.py

在内部samplemy_project在您的情况下),您可以根据需要分为几类。例如 Utils(常用功能)、Database(读取、写入)、View(用户命令)等。这取决于您的项目。

至于调用同一级别的模块,您应该__init__在顶层模块的文件中定义它们,sample在这种情况下。

例如:

__init__在 _my_project

from sample.core import a_Class
from sample.core import a_function
from sample.core import anything

然后从/test/test_basic.py你做:

from sample import a_Class
# or import sample

a = a_Class()  # use the class from core.py
# or a = sample.a_Class()

查看示例模块存储库:https ://github.com/navdeep-G/samplemod

于 2020-01-11T22:31:11.660 回答