Python3包装中的AttributeError

这看起来非常简单...直到我要尝试第7-9次使它第一次起作用。我使用的是python3.7,Mac OS。

假设我在文件夹prediction_model下,是以下文件的目录树。

-- setup.py
--- prediction_model
    |-- Readme.md
    |-- __init__.py
    |-- data
    |   |-- VDFF.csv
    |   +-- SAAA.csv
    |-- models.py
    |-- preprocess.py
    |-- tests
    +-- _data.csv

我的setup.py

from setuptools import setup,find_packages

setup(name='prediction_model',version='0.7',description='I need official documentation that works',author='JL',author_email='JL_from_uni',packages=find_packages(),#what does this do to make the developers' life easier,seriously?
      scripts = ['models.py','preprocess.py'],zip_safe=False)

__init__.py看起来像这样:

from prediction_model import preprocess
from prediction_model import models

preprocess.py有一个名为run()的功能,而models.py有一个我要起诉的main()

我实际上已经尝试过使用setup.py的各种版本,所有版本均使用: python -m pip install --user .

如果在python控制台上调用,还返回AttributeError:

import prediction_model(不会返回错误)

prediction_model.src.main()

AttributeError: module 'prediction_model' has no attribute 'src'

prediction_model.main()

AttributeError: module 'prediction_model' has no attribute 'main'

prediction_model.run()

AttributeError: module 'prediction_model' has no attribute 'run'

我不敢相信那里的所有文档都有不同的解释。显然没有任何作用,那么有更多经验的人认为什么会起作用?

MELIDY 回答:Python3包装中的AttributeError

设置

最佳做法是使用 src布局(参见https://blog.ionelmc.ro/2014/05/25/python-packaging/),因此,我建议您像这样组织目录(因为您不应打包测试和自述文件以构建分布,它们将保留在src目录之外):

project
├─ src
|  └─ package
|     ├─ __init__.py
|     ├─ __main__.py
|     ├─ data.tsv
|     └─ module.py
├─ tests
|  └─ test_module.py
├─ MANIFEST.in
├─ README.rst
└─ setup.py

具有以下setup.py文件内容:

import setuptools

setuptools.setup(
    name="project name",version="project version",url="project URI",author="your name",author_email="your email",package_dir={"": "src"},packages=setuptools.find_namespace_packages(where="src"),include_package_data=True
)

以及以下MANIFEST.in文件内容:

graft src
graft tests
global-exclude *.py[cod]

注释。-如果您不希望在保留package目录的同时在src目录中找到顶级src目录(例如发布修改):

project
├─ src
|  ├─ __init__.py
|  ├─ __main__.py
|  ├─ data.tsv
|  └─ module.py
├─ tests
|  └─ test_module.py
├─ MANIFEST.in
├─ README.rst
└─ setup.py

然后将package映射到src参数中的package_dir目录,并在package函数的packages参数中显式列出setuptools.setup在setup.py文件中(参见https://docs.python.org/3/distutils/examples.html#pure-python-distribution-by-package):

import setuptools

setuptools.setup(
    name="project name",package_dir={"package": "src"},packages=["package"],include_package_data=True
)

包裹

现在,您可以使用以下命令将项目打包到 source 分发中:

$ python setup.py sdist
使用此命令

built 发行版(这是setuptools的扩展命令,要求在您的Python环境中安装wheel-因此运行pip install wheel之前):

$ python setup.py bdist_wheel

或同时使用以下命令:

$ python setup.py sdist bdist_wheel

在新的dist目录中创建以下文件:

  • {project name}-{project version}.tar.gz用于源分发;
  • {project name}-{project version}-{compatibility tags}.whl用于构建发行版。

安装

现在您可以使用以下命令从源代码分发安装项目:

$ pip install dist/{project name}-{project version}.tar.gz

或使用以下命令从构建的发行版中进行

$ pip install dist/{project name}-{project version}-{compatibility tags}.whl

或使用此命令从项目树(无需为此项目打包项目):

$ pip install .

运行

最终,您可以像这样导入项目:

import package.module

package.module.function()
,

通常的项目结构:(长话短说,您想要一个带有项目名称的目录setup.py来获取它,这是通常的方法,请看几个存储库,例如https://github.com/boto/boto3)。 / p>

-- setup.py
-- README.md
--- prediction_model
    |-- __init__.py
    |-- data
    |   |-- VDFF.csv
    |   +-- SAAA.csv
    |-- models.py
    |-- preprocess.py
    |-- tests
    +-- _data.csv

然后您要执行以下操作:

virtualenv myvirtualenv 
source myvirtualenv/bin/activate
python setup.py install

您的设置看起来不错,现在预测模型是一个包,您也可以更改:

from . import preprocess
from . import models

收件人

from prediction_model import preprocess
from prediction_model import models

正常setup.py

from setuptools import setup,find_packages

setup(
    name='cost_estimation',version='0.0.1',packages=find_packages(),url='http://github.com/<WHATEVER/WHATEVER>',install_requires=[
        'numpy',],tests_require=[
         'nosetests',test_suite='nose.collector',license='',dependency_links=[
        'http://YOURPRIVATEPYPISERVER/packages'
    ],keywords='models,prediction',author='your name',description='Model prediction cool stuff'
)
本文链接:https://www.f2er.com/3050361.html

大家都在问