使用setuptools/distribute时,我无法让安装程序提取任何package_data文件.我读过的所有内容都表明以下是正确的方法.有人可以建议吗?
setup(
name='myapp',
packages=find_packages(),
package_data={
'myapp': ['data/*.txt'],
},
include_package_data=True,
zip_safe=False,
install_requires=['distribute'],
)
Run Code Online (Sandbox Code Playgroud)
myapp/data/数据文件的位置在哪里.
是否可以将安装后的Python脚本文件指定为setuptools setup.py文件的一部分,以便用户可以运行该命令:
python setup.py install
Run Code Online (Sandbox Code Playgroud)
在本地项目文件存档,或
pip install <name>
Run Code Online (Sandbox Code Playgroud)
对于PyPI项目,脚本将在标准setuptools安装完成后运行?我希望执行可以在单个Python脚本文件中编码的安装后任务(例如,向用户提供自定义安装后消息,从其他远程源存储库中提取其他数据文件).
几年前我遇到了这个回答这个主题的答案,听起来好像当时的共识是你需要创建一个install子命令.如果仍然如此,那么有人可以提供一个如何执行此操作的示例,以便用户无需输入第二个命令来运行脚本吗?
我是distutils的新手..我正在尝试包含一些数据文件以及包..这是我的代码..
from distutils.core import setup
setup(name='Scrapper',
version='1.0',
description='Scrapper',
packages=['app', 'db', 'model', 'util'],
data_files=[('app', ['app/scrapper.db'])]
)
Run Code Online (Sandbox Code Playgroud)
执行后创建的zip文件python setup.py sdist不包含scrapper.db文件.我在app目录中有scrapper.db文件..
谢谢您的帮助.
我有一个python具有固定布局的应用程序,我无法更改.我想用setuptools把它包起来,比如写一个setup.py脚本.
使用官方文档,我能够编写第一个模板.但是,有问题的应用程序使用了许多未明确包含任何包的其他数据文件.这是一个示例源树:
somepackage
__init__.py
something.py
data.txt
additionalstuff
moredata.txt
INFO.txt
Run Code Online (Sandbox Code Playgroud)
这是麻烦:代码something.py 读取文件moredata.txt和INFO.txt.对于前者,我可以通过添加一个空additionalstuff/__init__.py文件来提升additionalstuff一个包并让它被选中来解决这个问题setuptools.但我怎么可能加入INFO.txt我的.egg?
提出的解决方案使用了类似的东西
package_data = { '' : ['moredata.txt','INFO.txt']}
Run Code Online (Sandbox Code Playgroud)
不为我工作,因为文件moredata和INFO.txt不属于一个包,而是单独的文件夹,这只是模块作为一个整体的一部分,而不是任何个人软件包的一部分.如上所述,这可以moredata.txt通过添加__init__.py文件来修复additionpythonalstuff,从而将其提升到包.但是,这不是一个优雅的解决方案,并且根本不起作用INFO.txt,它位于顶级目录中.
根据接受的答案,这是解决方案
这是setup.py:
from setuptools import setup, find_packages
setup(
name='mytest',
version='1.0.0',
description='A sample Python project',
author='Test',
zip_safe=False,
author_email='test@test.com',
keywords='test',
packages=find_packages(),
package_data={'': ['INFO.txt', 'moredata.txt'],
'somepackage':['data.txt']},
data_files=[('.',['INFO.txt']),
('additionalstuff',['additionalstuff/moredata.txt'])],
include_package_data=True, …Run Code Online (Sandbox Code Playgroud) 我有一个带有标准setup.py安装程序的Python包,但我不能在我的生活中让它在某个地方安装一些预先定义的配置文件到我的setup-)函数这样调用:
setup(
name='Hydrant',
version=version,
description=long_description,
author='Scott Frazer',
author_email='scott.d.frazer@gmail.com',
packages=['hydrant'],
package_data={'hydrant': ['sql/*.sql', 'hydrant.conf', 'hydrant.deploy']},
data_files=[('config', ['hydrant/hydrant.conf'])],
install_requires=[
"xtermcolor>=1.0.3",
"pyyaml",
"pymysql",
"jprops"
],
entry_points={
'console_scripts': [
'hydrant = hydrant.Main:Cli'
]
},
test_suite='hydrant.test',
license = "MIT",
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试package_data,data_files但他们似乎什么也没做.我正在使用命令行安装到虚拟环境中:
$ python setup.py install
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激!
注意这个问题涉及hatch(不是setuptools也不是distutils)。
我正在开发我的第一个包,并且正在遵循本指南。
\n我的项目结构如下:
\nmypackage\n\xe2\x94\x82 LICENSE\n\xe2\x94\x82 pyproject.toml\n\xe2\x94\x82 README.md\n\xe2\x94\x82 requiremets.txt \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80docs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80scripts \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80mypackage\n\xe2\x94\x82 config.py\n\xe2\x94\x82 first_module.py\n\xe2\x94\x82 datatypes.py\n\xe2\x94\x82 utils.py\n\xe2\x94\x82 first_module.py\n\xe2\x94\x82 __init__.py \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tests\nRun Code Online (Sandbox Code Playgroud)\n但是,我注意到其中只有上面树的C:\\Users\\<User>\\Miniconda3\\envs\\myenv\\Lib\\site-packages\\mypackage内容。./mypackage/scr/mypackage
我想要实现的是还安装脚本文件夹,因为在源代码中我定义了一个函数
\ndef open_tutorial() -> None:\n site_packages = next(\n p for p in sys.path if "site-packages" in p\n )\n open(site_packages+"\\\\mypackage\\\\scripts\\\\tutorial.py")\nRun Code Online (Sandbox Code Playgroud)\n这将允许用户运行如下代码
\nimport mypackage as mpkg\n\nmpkg.open_tutorial()\nRun Code Online (Sandbox Code Playgroud)\n我期望的是scripts/tutorial.py在用户编辑器中打开。
如何实现我的目标?我想我应该编辑文件中的某些内容pyproject.toml,或者我必须hatch以某种方式进行设置,但我不知道如何设置。有什么建议吗?
相关问题:我希望它适用于任何操作系统,因此open_tutorial()欢迎任何关于如何更改我的功能的提示!:)
我不知道为什么当我运行pip install ../ path_to_my_proj /(来自virtualenv)时,没有数据文件被复制到sitepackage / myproj /文件夹中。python软件包正确复制了。
python版本3.4.4
我的项目目录如下:
??? myproj
? ??? __init__.py
? ??? module1.py
? ??? module2.py
??? data_files
| ??? subfolder1
? | ??? datafile.dll
? | ??? datafile2.dll
| ??? subfolder2
? ??? datafile3.dll
? ??? datafile4.dll
|
??? MANIFEST.in
??? setup.py
Run Code Online (Sandbox Code Playgroud)
我的MANIFEST.in看起来像
recursive-include data_files *
include README.md
Run Code Online (Sandbox Code Playgroud)
我的设置如下:
setup(
name='myproj',
version='0.1.1',
install_requires=['requirement'],
packages=['myproj'],
include_package_data=True,
)
Run Code Online (Sandbox Code Playgroud) 我在setup.py脚本中包含数据文件时遇到麻烦。我的程序包设置如下:
my_package/
setup.py
MANIFEST.in
my_package/
__init__.py
access_data.py
data_files/
my_data_file.csv
Run Code Online (Sandbox Code Playgroud)
我想my_data_file.csv在安装时包括该文件,以便可以读取access_data.py。为此,我在中使用了package_data关键字setuptools:
setup(...,
packages=['my_package'],
package_data={'my_package': ['./my_package/data_files/my_data_file.csv']},
include_package_data=True
)
Run Code Online (Sandbox Code Playgroud)
我还将文件包含在MANIFEST.in:
recursive-include my_package/data_files *
Run Code Online (Sandbox Code Playgroud)
setup.py似乎运行良好,并且不会引发任何错误。但是,当我导入程序包时,我得到一个文件找不到错误,因为my_data_file.csv丢失了。我尝试引用其他堆栈溢出问题(尤其是这个问题),但无法弄清楚我在做什么错。如何获取setup.py以包含必要的数据文件?
我正在尝试添加*.ui&*.png文件setup.py,这就是我到目前为止所拥有的
from setuptools import setup, find_packages
from smlgui import __version__
setup(
name='smlgui',
version=__version__,
packages=find_packages(),
url='https://github.com/akshaybabloo/SML-GUI',
license='MIT',
author='Akshay Raj Gollahalli',
author_email='akshay@gollahalli.com',
description='Data exporter for Spikes Markup Language (SML).',
requires=['click', 'pyqt'],
scripts=['sml.sh', 'sml.cmd'],
package_data={'smlgui': ['*.ui', '*.png']},
include_package_data=True
)
Run Code Online (Sandbox Code Playgroud)
我不确定发生了什么,但是当我尝试执行python setup.py install或pip install .仅*.py安装时。
我尝试按照此处给出的过程 ->使用 setup.py 包含非 Python 文件,但它没有帮助。
另外,我创建MANIFEST.in了
include *.ui
include *.png
Run Code Online (Sandbox Code Playgroud)
我不确定是否必须告诉我setup.py读取此文件还是它会自动完成。
我的文件结构是
root_folder
|
| MANIFEST.in
| setup.py
| sml.cmd …Run Code Online (Sandbox Code Playgroud) 我想分发一个具有闭源依赖关系的 Python 包。我正在使用 setup.py,如果我也使用 setup.py 进行编译,一切都会正常。
我有以下文件结构:
.
??? closed_source
? ??? compiled.so
??? python_modules
? ??? file1.py
? ??? file2.py
? ??? ...
? ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)
我也尝试包含compiled.so在python_modules. 在file1.py我使用import compiled哪个失败。
以下工作,但静默未能包括动态库:
setup(
name='my_package',
version=0.1,
packages=['python_modules'],
package_dir={'python_modules': 'python_modules'},
package_data={'': ['closed_source/compiled.so']}, # also tried using key compiled
include_package_data=True,
)
Run Code Online (Sandbox Code Playgroud) 我创建并发布了一个 Python 包,但我无法让它包含文本文件。
这是存储库:https : //github.com/void4/gimpscm
我需要包含的文件是 procdump.txt,位于 gimpscm 目录中。
所以布局是这样的:
setup.py
setup.cfg
MANIFEST.in
gimpscm/
/__index__.py
/procdump.txt
/(other .py files)
Run Code Online (Sandbox Code Playgroud)
我试过:
当前的 setup.py 包括:
package_data = {"gimpscm": ["gimpscm/procdump.txt"]},
include_package_data=True,
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in 包含:
recursive-include gimpscm *.txt
Run Code Online (Sandbox Code Playgroud)
txt 文件与 dist 目录中 zip 文件的 gimpscm 子目录中的 .py 文件一样包含在内。但是当我pip install gimpscm,文件根本没有安装。
我以这种方式发布包:
setup.py
setup.cfg
MANIFEST.in
gimpscm/
/__index__.py
/procdump.txt
/(other .py files)
Run Code Online (Sandbox Code Playgroud)
在 pypi 网站上,上传的包确实包含 txt 文件,只是不包含在pip install.
这个过程到目前为止已经非常令人沮丧,Stackoverflow 和其他网站都没有给出明确的答案。我已经尝试了 MANIFEST.in 和 setup.py …
我正在做一个网站项目。
当我使用 setup.py 并运行 setup.py build 时,构建脚本会排除我网站中的所有资源(基本上是所有非 python 文件)。我究竟做错了什么?
我希望在我的PyQt4项目中有一个拼写检查功能,看起来pyenchant是做这件事的好选择.这是完美的工作.但我想制作自己的单词词典并用它们提供模块.有可能吗?
之后,如何在其他想要使用原始程序的计算机上轻松地使用这个新词典呢?我不想让用户安装一些奇怪的程序和字典来使用我的简单程序.
PS:我在Linux系统上.
python ×13
setuptools ×7
setup.py ×3
pip ×2
python-3.x ×2
distribute ×1
distutils ×1
installation ×1
manifest ×1
package ×1
packaging ×1
pyenchant ×1
pypi ×1
python-2.7 ×1
web ×1