diff --git a/flask/app.py b/flask/app.py index 2cad86e2..14b6d138 100644 --- a/flask/app.py +++ b/flask/app.py @@ -568,8 +568,12 @@ class Flask(_PackageBoundObject): package_path = self.root_path if hasattr(root_mod, '__path__'): package_path = os.path.dirname(package_path) - site_parent, site_folder = os.path.split(package_path) + # leave the egg wrapper folder or the actual .egg on the filesystem + if os.path.basename(package_path).endswith('.egg'): + package_path = os.path.dirname(package_path) + + site_parent, site_folder = os.path.split(package_path) py_prefix = os.path.abspath(sys.prefix) if package_path.startswith(py_prefix): base_dir = py_prefix diff --git a/tests/flask_tests.py b/tests/flask_tests.py index 7b3f334e..4b0150af 100644 --- a/tests/flask_tests.py +++ b/tests/flask_tests.py @@ -1077,6 +1077,23 @@ class InstanceTestCase(unittest.TestCase): finally: sys.modules['myapp'] = None + def test_egg_installed_paths(self): + import types + expected_prefix = os.path.abspath(sys.prefix) + package_path = os.path.join(expected_prefix, 'lib', 'python2.5', + 'site-packages', 'MyApp.egg', 'myapp') + mod = types.ModuleType('myapp') + mod.__path__ = [package_path] + mod.__file__ = os.path.join(package_path, '__init__.py') + sys.modules['myapp'] = mod + try: + mod.app = flask.Flask(mod.__name__) + self.assertEqual(mod.app.instance_path, + os.path.join(expected_prefix, 'share', + 'myapp-instance')) + finally: + sys.modules['myapp'] = None + class JSONTestCase(unittest.TestCase):