【问题标题】:python installing package with submodulespython安装带有子模块的包
【发布时间】:2017-12-18 15:42:14
【问题描述】:

我有一个自定义项目包,其结构如下:

 package-dir/
     mypackage/
         __init__.py
         submodule1/
              __init__.py
              testmodule.py
         main.py
     requirements.txt
     setup.py

按照python-packaging 的建议,使用cd package-dir 后跟$pip install -e .pip install .,只要我从package-dir 访问包即可

例如:

 $cd project-dir
 $pip install .

此时此方法有效:

 $python -c 'import mypackage; import submodule1'

但这不起作用

 $ cd some-other-dir
 $ python -c 'import mypackage; import submodule1'
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ImportError: No module named submodule1

如何安装所有子模块?

另外,如果我检查package-dir/build/lib.linux-x86_64-2.7/mypackage 目录,我只会看到mypackage/*.py 中的即时文件,而没有看到mypackage/submodule1

setup.py 看起来像:

from setuptools import setup
from pip.req import parse_requirements

reqs = parse_requirements('./requirements.txt', session=False)
install_requires = [str(ir.req) for ir in reqs]


def readme():
    with open('README.rst') as f:
        return f.read()

setup(name='mypackage',
      version='1.6.1',
      description='mypackage',
      long_description=readme(),
      classifiers=[

      ],
      keywords='',
      url='',
      author='',
      author_email='',
      license='Proprietary',
      packages=['mypackage'],
      package_dir={'mypackage': 'mypackage'},
      install_requires=install_requires,
      include_package_data=True,
      zip_safe=False,
      test_suite='nose.collector',
      tests_require=['nose'],
      entry_points={
          'console_scripts': ['mypackage=mypackage.run:run'],
      }
      )

【问题讨论】:

  • python -c 'from mypackage import submodule1' 在其他目录中工作吗?
  • 不仅在同一个package-dir,如果有帮助,请在最后更新一些有关构建的信息
  • setup.py的内容是什么?具体来说,你有没有像packages=setuptools.find_packages() 这样的行?
  • @NilsWerner 更新,不,我没有那行.. 会试试

标签: python pip setuptools python-packaging python-install


【解决方案1】:

setup.py 缺少有关您的包结构的信息。您可以通过添加一行来启用自动发现

setup(
    # ...
    packages=setuptools.find_packages(),
)

给它。

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2015-11-15
    • 2012-05-05
    • 1970-01-01
    • 2020-01-20
    • 2013-11-05
    • 2020-07-16
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多