您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从另一个目录导入python包?

如何从另一个目录导入python包?

您可以将父目录添加到中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()

我的内容config.py

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

python 2022/1/1 18:40:00 有434人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶