Gér*_*aud 9 python packaging setuptools
在python项目上工作,我试图分离源代码和单元测试; 这是项目结构:
MyProject/
MANIFEST.in
README.md
setup.py
source/
__init.py__
my_project/
__init.py__
some_module.py
test/
__init.py__
my_project/
__init.py__
test_some_module.py
Run Code Online (Sandbox Code Playgroud)
这是setup.py文件:
from setuptools import setup, find_packages
setup(
name='my_project',
packages=find_packages(where='./source'),
description='My project to be packaged',
version='1.0.0',
author='me'
install_requires=[
'fastnumbers~=2.0.1',
'numpy~=1.14.1',
'pandas~=0.22.0'
],
extras_require={
'dev': ['check-manifest'],
'test': [
'mock',
'PyHamcrest',
'pytest',
'pytest-cov'
],
}
)
Run Code Online (Sandbox Code Playgroud)
然后,当我运行命令时python3 setup.py sdist,它失败并显示以下输出:
running sdist
running egg_info
writing my_project.egg-info/PKG-INFO
writing requirements to my_project.egg-info/requires.txt
writing dependency_links to my_project.egg-info/dependency_links.txt
writing top-level names to my_project.egg-info/top_level.txt
error: package directory 'my_project' does not exist
Run Code Online (Sandbox Code Playgroud)
生成的top_level.txt文件看起来很好:
my_project
Run Code Online (Sandbox Code Playgroud)
但它看起来setuptools不是从source文件夹开始找到要打包的模块.
setup.py和MANIFEST.in文件到source文件夹?where论点在setuptools.find_packages功能上是什么?hoe*_*ing 12
您离工作解决方案只有一步之遥.加
package_dir={
'': 'source',
},
Run Code Online (Sandbox Code Playgroud)
该setup()参数:
setup(
...,
packages=find_packages(where='source'),
package_dir={
'': 'source',
},
...
)
Run Code Online (Sandbox Code Playgroud)
但是,看起来你source通过__init__.py在其中放置了一个python包的dir .这是故意的吗?你有像这样的导入语句吗?
import source.my_project
from source.my_project.my_module import stuff
Run Code Online (Sandbox Code Playgroud)
或类似的,使用source包名?然后要注意,一旦安装构建的包,导入将失败,因为source在构建时包含源时会省略.我看到两种方式:
source/__init__.py,使用package_dir如上所述进行my_project顶级包,省略source导入(如果你得到任何错误,只需删除myproject-1.0.0.egg_infodir并重新创建python setup.py egg_info),或者source作为顶级包:不使用package_dir,请在该项目的根目录软件包(packages=find_packages()但没有明确说明where).| 归档时间: |
|
| 查看次数: |
2503 次 |
| 最近记录: |