как создать пакет так, чтобы с помощью `import mypackage` импортировались нужные мне файлы - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать пакет pip. моя файловая структура:

setup.py
README.md
LICENSE
mypackage/
    mypackage.py
    __init__.py

my __init__.py выглядит так:

from mypackage import *

mypackage.py

def somefunc():
    return "some value"

любой мой setup.py выглядит так:

import setuptools
with open("README.md", "r") as fh:
    long_description = fh.read()
setuptools.setup(
     name='mypackage',  
     version='0.0.1',
     author="Yonatan Medan",
     description="some description",
     long_description=long_description,
   long_description_content_type="text/markdown",
     packages=["mypackage"],
     classifiers=[
         "Programming Language :: Python :: 3",
         "License :: OSI Approved :: MIT License",
         "Operating System :: OS Independent",
     ],

 )


я упаковал пакет с python setup.py bdist_wheel, и установил его с pip install dist/mypackage-0.0.1-py3-none-any.whl проблема в том, что когда я пытаюсь импортировать его с Python

Мне нужно сделать что-то подобное, чтобы импортировать somefunc:

from mypackage.mypackage import somefunc

что я хочу это:

from mypackage import somefunc

как это можно сделать?

1 Ответ

0 голосов
/ 08 апреля 2019

Учитывая следующую структуру каталогов, вы можете сделать это двумя способами.

package
├── hello.py
├── __init__.py

Либо определите функцию внутри __init__.py, как показано ниже

from . import hello

def somefunc():
    print("Some function inside __init__.py")

Тогда в repl вы можете сделать

>>> from package import somefunc
>>> somefunc
<function somefunc at 0x7f98e380d400>
>>> somefunc()
Some function inside __init__.py
>>> 

Или вам нужно импортировать * из модуля внутри __init__.py, как показано ниже.

from .hello import *


def somefunc():
    print("Some function inside __init__.py")

А потом импортировать вот так

>>> import package
>>> package.greet()
Hello
>>> from package import *
>>> greet()
Hello

Кроме того, для ясности лучше не указывать имя пакета и имя модуля.

...