Я новичок в Python, и у меня много разочарований, пытаясь понять проблему с модулем, над которым я работаю. До сих пор весь процесс был выполнен путем запуска файла __main__.py
. Я тестировал код с разными примерами, но всегда внутри __main__.py
. Теперь, когда я хочу протестировать модуль с за пределами, я устанавливаю его (все идет хорошо). Но затем, когда я пытаюсь загрузить модуль, который я установил, он дает мне ошибки импорта, которые не отображались, когда я работал с __main__.py
. Ошибка заключается в следующем:не может загрузить мой собственный модуль после установки
$ python3
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import hybrida
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/__init__.py", line 3, in <module>
from . import fem
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/__init__.py", line 4, in <module>
from . import input
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/input.py", line 5, in <module>
from .mesh.formats import readers
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/mesh/__init__.py", line 3, in <module>
from . import mesh
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/mesh/mesh.py", line 14, in <module>
from . import formats
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/mesh/formats/__init__.py", line 5, in <module>
from . import abaqus
File "/Users/aaragon/.virtualenvs/pydev/lib/python3.4/site-packages/hybrida-0.1.0-py3.4.egg/hybrida/fem/mesh/formats/abaqus.py", line 7, in <module>
from fem.conditions import Dirichlet
ImportError: No module named 'fem'
Так что я не понимаю, что происходит, потому что ясно, что модуль импортируется, когда я бегу от __main__.py
. Единственное, что я могу придумать, это то, что существует некоторая круговая зависимость, когда я пытаюсь загрузить модуль извне, fem
находится сверху и в то время как загружен его пока не видно, t импортировать его. Но если это так, то как в мире я решаю эту проблему?
Структура проекта заключается в следующем:
$ tree .
.
├── AUTHORS.rst
├── CHANGELOG.rst
├── MANIFEST.in
├── README.rst
├── appveyor.yml
├── bootstrap.py
├── setup.cfg
├── setup.py
└── src
├── hybrida
│ ├── __init__.py
│ ├── __main__.py
│ ├── fem
│ │ ├── __init__.py
│ │ ├── conditions
│ │ │ ├── __init__.py
│ │ │ ├── dirichlet.py
│ │ │ └── neumann.py
│ │ ├── input.py
│ │ ├── mesh
│ │ │ ├── __init__.py
│ │ │ ├── elements
│ │ │ │ ├── __init__.py
│ │ │ │ ├── common.py
│ │ │ │ ├── element.py
│ │ │ │ ├── quadrangle.py
│ │ │ │ ├── quadrature.py
│ │ │ ├── formats
│ │ │ │ ├── __init__.py
│ │ │ │ ├── abaqus.py
│ │ │ │ ├── gmsh.py
│ │ │ │ ├── groups.py
│ │ │ │ └── vtk.py
│ │ │ ├── material
│ │ │ │ ├── __init__.py
│ │ │ │ └── stress.py
│ │ │ └── mesh.py
│ │ ├── simulation.py
│ │ └── step.py
│ └── utils
│ ├── __init__.py
│ └── classes.py
└── hybrida.egg-info
├── PKG-INFO
├── SOURCES.txt
├── dependency_links.txt
├── entry_points.txt
├── not-zip-safe
└── top_level.txt
UPDATE
Мой config.py файл:
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import glob
import io
import re
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):
return io.open(
join(dirname(__file__), *names),
encoding=kwargs.get("encoding", "utf8")
).read()
setup(
name="hybrida",
version="0.1.0",
license="BSD",
description="Enter a description for hybrida here",
long_description="%s\n%s" % (read("README.rst"), re.sub(":obj:`~?(.*?)`", r"``\1``", read("CHANGELOG.rst"))),
author="Alejandro M. Aragon",
author_email="[email protected]",
url="https://github.com/alejandro-aragon/hybrida",
packages=find_packages("src"),
package_dir={"": "src"},
py_modules=[splitext(basename(i))[0] for i in glob.glob("src/*.py")],
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.6",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Utilities",
],
keywords=[
# eg: "keyword1", "keyword2", "keyword3",
],
install_requires=[
# eg: "aspectlib==1.1.1", "six>=1.7",
],
extras_require={
# eg: 'rst': ["docutils>=0.11"],
},
entry_points={
"console_scripts": [
"hybrida = hybrida.__main__:main"
]
}
)
Вы можете разместить установку .py? – reptilicus
@reptilicus Я обновил сообщение с файлом setup.py – aaragon