csy*_*oul 13 python python-module python-3.x
我有一个结构如下的项目:
project
??? api
? ??? __init__.py
? ??? api.py
??? instance
? ??? __init__.py
? ??? config.py
??? package
? ??? __init__.py
? ??? app.py
??? requirements.txt
??? tests
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
我正在尝试config.py从package/app.py如下所示调用文件:
# package/app.py
from instance import config
# I've also tried
import instance.config
import ..instance.config
from ..instance import config
Run Code Online (Sandbox Code Playgroud)
但我总是收到以下错误:
Traceback (most recent call last):
File "/home/csymvoul/projects/project/package/app.py", line 1, in <module>
from instance import config
ModuleNotFoundError: No module named 'instance'
Run Code Online (Sandbox Code Playgroud)
修改sys.path不是我想做的事情。我知道这个问题得到了很好的回答,但给出的答案对我不起作用。
编辑:当移动app.py到根文件夹时,它工作得很好。但我需要把它放在package文件夹下。
RMP*_*MPR 14
您可以将父目录添加到PYTHONPATH,为了实现这一点,您可以使用sys.path. 因此,您可以轻松添加父目录,如下所示:
import sys
sys.path.insert(0, '..')
from instance import config
Run Code Online (Sandbox Code Playgroud)
请注意,前面的代码使用相对路径,因此您必须在同一位置启动文件,否则它可能无法工作。要从任何地方启动,您可以使用该pathlib模块。
from pathlib import Path
import sys
path = str(Path(Path(__file__).parent.absolute()).parent.absolute())
sys.path.insert(0, path)
from instance import config
Run Code Online (Sandbox Code Playgroud)
但是,以前的方法比任何事情都更重要,为了正确地做事,您首先需要根据这篇非常详细的博客文章python 打包重塑您的项目结构,使用src文件夹的推荐方式。
project
??? CHANGELOG.rst
??? README.rst
??? requirements.txt
??? setup.py
??? src
? ??? api
? ? ??? api.py
? ? ??? __init__.py
? ??? instance
? ? ??? config.py
? ? ??? __init__.py
? ??? package
? ??? app.py
? ??? __init__.py
??? tests
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
请注意,您实际上并不需要 ,requirements.txt因为您可以在setup.py. 示例setup.py(改编自此处):
import sys
sys.path.insert(0, '..')
from instance import config
Run Code Online (Sandbox Code Playgroud)
我的内容api.py:
from instance import config
def main():
print("imported")
config.config()
Run Code Online (Sandbox Code Playgroud)
我的内容config.py:
def config():
print("config imported successfully")
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到所有以前的
venv(Python 3.3 <=) 在项目的根目录中:python -m venv .
Run Code Online (Sandbox Code Playgroud)
并激活:
source bin/activate
Run Code Online (Sandbox Code Playgroud)
在项目的根目录中使用pip install -e .(带点)命令
from instance import config现在有效,以确认您可以使用以下命令运行 api.py:python src/api/api.py
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13661 次 |
| 最近记录: |