使用setuptools在Python包中包含额外的文件
我正在尝试使用使用setuptools在Python包中包含额外的文件,python,setuptools,Python,Setuptools,我正在尝试使用setuptools构建python控制盘。包需要包括两个文件: mymodule.py-与setup.py myjar.jar-存在于我的包目录之外的java.jar文件 我正在使用python3 setup.py bdist\u wheel构建我的包 如果我这样调用setup(): setup( name="mypkg", py_modules=["mymodule"], data_files=[('jars', ['../target/scala-
setuptools
构建python控制盘。包需要包括两个文件:
-与mymodule.py
setup.py
-存在于我的包目录之外的java.jar文件myjar.jar
setup()
:
setup(
name="mypkg",
py_modules=["mymodule"],
data_files=[('jars', ['../target/scala-2.11/myjar.jar'])]
)
然后,myjar.jar
成功地包含在.whl中(到目前为止还不错),但是当我pip安装mypkg
时,它将jar放置在/usr/local/myjar.jar
(有点解释了为什么),这根本不是我想要的,我希望它与mymodule.py
存在于同一个位置,即/usr/local/lib/python3.7/site packages/
如果我将setup.py
更改为
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': '../target/scala-2.11/myjar.jar'}
)
或
然后,myjar.jar
就不会包含在.whl中。我尝试将myjar.jar
复制到同一目录中,并将setup.py
更改为:
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': 'myjar.jar'}
)
或
但是仍然myjar.jar
没有包含在.whl中
我已经为这件事焦头烂额好几个小时了,所以才来这里
我读过无数关于这方面的文章:
数据文件
,包数据
,包括包数据=True
和/或使用清单。在文件中,但我仍然无法按照我的意愿工作,所以我在这里希望有人能告诉我做错了什么。数据文件(在这种情况下,myjar.jar
)实际上应该是包数据文件,因此它们应该是Python包的一部分。因此,在父目录中有这样的文件会使事情变得更加复杂,但可能并非不可能。让我们从一个简单的例子开始。我相信像下面这样的方法应该会奏效
项目目录结构:
MyProject
├ MANIFEST.in
├ mymodule.py
├ setup.py
└ myjars
├ __init__.py
└ myjar.jar
清单。在
中:
recursive-include myjars *.jar
setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='MyProject',
version='1.2.3',
#
include_package_data=True,
packages=['myjars'],
py_modules=["mymodule"],
)
myjars/\uuuuu init\uuuuuy.py
可能不是严格必要的,但我认为最好有它。像往常一样,一个空的\uuuu init\uuuu.py
文件就足够了
(这假设myjars/myjar.jar
文件在构建源发行版sdist
之前存在。)
至于处理父目录中的数据文件,我的建议是在调用setup.py
之前简单地复制(或符号链接)这些文件,可能是作为shell脚本的一部分或类似的内容。在setup.py
中,可能有一些方法可以作为自定义setuptools命令的一部分进行复制,但在我看来,这是不值得的,实际上这不是setup.py
的工作的一部分。数据文件(在这种情况下,myjar.jar
)应该是包数据文件,因此,它们应该是Python包的一部分。因此,在父目录中有这样的文件会使事情变得更加复杂,但可能并非不可能。让我们从一个简单的例子开始。我相信像下面这样的方法应该会奏效
项目目录结构:
MyProject
├ MANIFEST.in
├ mymodule.py
├ setup.py
└ myjars
├ __init__.py
└ myjar.jar
清单。在
中:
recursive-include myjars *.jar
setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='MyProject',
version='1.2.3',
#
include_package_data=True,
packages=['myjars'],
py_modules=["mymodule"],
)
myjars/\uuuuu init\uuuuuy.py
可能不是严格必要的,但我认为最好有它。像往常一样,一个空的\uuuu init\uuuu.py
文件就足够了
(这假设myjars/myjar.jar
文件在构建源发行版sdist
之前存在。)
至于处理父目录中的数据文件,我的建议是在调用setup.py
之前简单地复制(或符号链接)这些文件,可能是作为shell脚本的一部分或类似的内容。在setup.py
中,可能有一些方法可以作为自定义setuptools命令的一部分进行复制,但在我看来,这样做不值得,而且实际上这不是setup.py
工作的一部分。谢谢,这帮了大忙。我不得不对我的代码进行多次重组,以匹配您文章中的结构,现在它可以工作了。我现在一点一点地解开它,把它移回我想要的结构,看看它在哪里断裂。一个关键的区别是我的代码只包含一个模块,而不是一个包。让我们看看我能不能让它工作。我明白了。基本上你应该从你展示的最后一个例子(第五个)开始。谢谢,这很有帮助。我不得不对我的代码进行多次重组,以匹配您文章中的结构,现在它可以工作了。我现在一点一点地解开它,把它移回我想要的结构,看看它在哪里断裂。一个关键的区别是我的代码只包含一个模块,而不是一个包。让我们看看我能不能让它工作。我明白了。基本上你应该从你展示的最后一个例子(第五个)开始。是的!成功了,非常感谢。当然,关于符号链接你也是对的,所以我创建了它。是的!成功了,非常感谢。当然,关于符号链接你也是对的,所以我创建了它。