您可以将父目录添加到中PYTHONPATH
,以实现此目的,可以在中列出的“模块搜索路径”中使用OS依赖路径sys.path
。因此,您可以轻松添加父目录,如下所示:
import sys
sys.path.insert(0, '..')
from instance import config
请注意,先前的代码使用相对路径,因此您必须在相同位置启动文件,否则可能无法正常工作。要从任何地方启动,可以使用该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
但是,以前的方法比什么都更容易破解,为了正确地进行操作,您首先需要根据这个非常详细的博客文章python包装来重塑项目结构,并以推荐的方式使用src
文件夹。
您的目录布局必须如下所示:
project ├── CHANGELOG.rst ├── README.rst ├── requirements.txt ├── setup.py ├── src │ ├── api │ │ ├── api.py │ │ └── .py │ ├── instance │ │ ├── config.py │ │ └── .py │ └── package │ ├── app.py │ └── .py └── tests └── .py
请注意,您实际上并不需要,requirements.txt
因为您可以在中声明依赖项setup.py
。示例setup.py
(从此处改编):
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
from __future__ import absolute_import
from __future__ import print_function
import io
import re
from glob import glob
from os.path import basename
from os.path import dirname
from os.path import join
from os.path import splitext
from setuptools import find_packages
from setuptools import setup
def read(*names, **kwargs):
with io.open(
join(dirname(__file__), *names),
encoding=kwargs.get('encoding', 'utf8')
) as fh:
return fh.read()
setup(
name='nameless',
version='1.644.11',
license='BSD-2-Clause',
description='An example package. Generated with cookiecutter-pylibrary.',
author='mpr',
author_email='contact@ionelmc.ro',
packages=find_packages('src'),
package_dir={'': 'src'},
include_package_data=True,
zip_safe=False,
classifiers=[
# complete classifier list: http://pypi.python.org/pypi?%3Aaction=list_classifiers
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: Unix',
'Operating System :: POSIX',
'Operating System :: Microsoft :: Windows',
'Programming Language :: Python',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: Implementation :: cpython',
'Programming Language :: Python :: Implementation :: PyPy',
# uncomment if you test on these interpreters:
# 'Programming Language :: Python :: Implementation :: IronPython',
# 'Programming Language :: Python :: Implementation :: Jython',
# 'Programming Language :: Python :: Implementation :: stackless',
'Topic :: Utilities',
],
keywords=[
# eg: 'keyword1', 'keyword2', 'keyword3',
],
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
install_requires=[
# eg: 'aspectlib==1.1.1', 'six>=1.7',
],
extras_require={
# eg:
# 'rst': ['docutils>=0.11'],
# ':python_version=="2.6"': ['argparse'],
},
setup_requires=[
# 'pytest-runner',
],
entry_points={
'console_scripts': [
'api = api.api:main',
]
},
)
我的内容api.py
:
from instance import config
def main():
print("imported")
config.config()
def config():
print("config imported successfully")
您可以在这里找到所有以前的
可选,但建议使用:创建一个虚拟环境,venv
为此我在项目的根目录内使用(Python 3.3 <=):
python -m venv .
并激活:
source bin/activate
在项目根目录内 使用pip install -e .
(带点)命令 __
您的导入from instance import config
现已开始,以确认您可以使用以下命令运行api.py:
python src/api/api.py