Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Package setup.py and Flask directory structure

Update: added setup.py content.

I have the following directory structure:

setup.py
packagename/
    __init__.py
    useless_file.py

In __init__.py, I have the following:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

CONFIG_FILENAME = "packagename.settings"


def create_app():
    app = Flask(__name__)
    app.config.from_object(CONFIG_FILENAME)

    db.init_app(app)

    app.register_blueprint(sms_testing)

    return app

I followed Flask's recommended package structure.

Here is setup.py:

import os
from setuptools import setup

requires = (
        "flask",
        "flask-sqlalchemy",
        "requests>=0.13.6",
        "python-dateutil>=1.5",
        "twilio",
        "selenium",
        )

def read(fname):
    return open(os.path.join(os.path.dirname(__file__), fname)).read()

setup(
    name = "Package Name",
    version = "0.0.1",
    author = "Charles-Axel Dein",
    author_email = "[email protected]",
    description = ("useless"),
    license = "BSD",
    keywords = "example documentation tutorial",
    url = "http://packages.python.org/an_example_pypi_project",
    packages=['package_name',],
    # namespace_packages = ['package_name'],
    install_requires=requires,
    long_description=read('README.md'),
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Topic :: Utilities",
        "License :: OSI Approved :: BSD License",
    ],
)

When I do python setup.py develop, I get:

Traceback (most recent call last):
  File "setup.py", line 2, in <module>
    from setuptools import setup
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/__init__.py", line 2, in <module>
    # The Python Imaging Library.
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/extension.py", line 2, in <module>
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/dist.py", line 6, in <module>
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/sdist.py", line 5, in <module>
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 2623, in <module>
    if not len(req.specs):
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 679, in subscribe
    `requirements` must be a string or a (possibly-nested) sequence
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 2623, in <lambda>
    if not len(req.specs):
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 2172, in activate
    return pv
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1790, in declare_namespace
    module.__path__ = []; _set_parent_ns(packageName)
  File "/.virtualenvs/api/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 1761, in _handle_ns

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 238, in load_module
    mod = imp.load_module(fullname, self.file, self.filename, self.etc)
  File "/package_name/__init__.py", line 2, in <module>
    import flask
  File "/.virtualenvs/api/lib/python2.7/site-packages/flask/exthook.py", line 86, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named flask

(I redacted the folder)

I guess it's logical, since setuptools is trying to import my package, which imports packagename/__init__.py, where there is this import flask before it got the chance to install it.

The thing is, I need this import flask in __init__.py to create the db.

What would you recommend?

Thanks!

Chx

like image 837
charlax Avatar asked Dec 31 '25 21:12

charlax


1 Answers

I personally don't like python setup.py develop, have you tried this?

% pip install -e .

Where the current directory is the directory with your setup.py in it. It's similar to develop but will install all required packages.

like image 69
dlamotte Avatar answered Jan 03 '26 11:01

dlamotte



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!