使用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包中的文件?
我加载的包有许多我想从程序中加载的模板(用作字符串的文本文件).但是如何指定此类文件的路径?
想象一下,我想从以下位置读取文件:
package\templates\temp_file
Run Code Online (Sandbox Code Playgroud)
某种路径操纵?包基路径跟踪?
我编写了一个Python包,其中包含一个bsddb数据库,其中包含一个更耗时的计算的预计算值.为简单起见,我的安装脚本将数据库文件安装在与访问数据库的代码相同的目录中(在Unix上,类似于/usr/lib/python2.5/site-packages/mypackage/).
如何存储数据库文件的最终位置,以便我的代码可以访问它?现在,我正在使用基于__file__访问数据库的模块中的变量的hack :
dbname = os.path.join(os.path.dirname(__file__), "database.dat")
它有效,但看起来......是hackish.有一个更好的方法吗?我想让安装脚本从distutils模块中获取最终安装位置,并将其填入"dbconfig.py"文件,该文件与访问数据库的代码一起安装.
我正在尝试创建一个Python包,我有一个像这样的目录结构:
mypkg/
??? __init__.py
??? module1
? ??? x.py
? ??? y.py
? ??? z.txt
??? module2
??? a.py
??? b.py
Run Code Online (Sandbox Code Playgroud)
然后我添加了所有文件MANIFEST.in,当我检查创建的存档时,它有所有文件.
当我做python setup.py install的时候dist-packages/mypkg/module1.我只看到Python文件而不是z.txt.
我有z.txt两个MANIFEST.in和setup.py:
setup (
packages = [
'mypkg',
'mypkg.module1',
'mypkg.module2',
],
package_data = {
'mypkg': ['module1/z.txt']
},
include_package_data = True,
...
)
Run Code Online (Sandbox Code Playgroud)
我尝试添加该文件,data_files但是创建了一个目录/usr/local.我想将它保存在源代码目录中,因为代码使用该数据.
我已经阅读了下面列出的帖子,但我一直对于z.txt在正确的位置之后保持正确位置的方法感到困惑setup.py install.
我有一个Python库,除常规Python模块外,还有一些数据文件需要放在/usr/local/lib/python2.7/dist-package/mylibrary中.
不幸的是,我无法说服setup.py在那里实际安装数据文件.请注意,此行为是在安装 - 而不是sdist.
这是setup.py的略微编辑版本
module_list = list_of_files
setup(name ='Modules',
version ='1.33.7',
description ='My Sweet Module',
author ='PN',
author_email ='email',
url ='url',
packages = ['my_module'],
# I tried this. It got installed in /usr/my_module. Not ok.
# data_files = [ ("my_module", ["my_module/data1",
# "my_module/data2"])]
# This doesn't install it at all.
package_data = {"my_module" : ["my_module/data1",
"my_module/data2"] }
)
Run Code Online (Sandbox Code Playgroud)
这是在Python 2.7中(最终必须在2.6中运行),并且必须在10.04和12+之间的某些Ubuntu上运行.现在正在12.04开发它.
对于使用"setup.py"构建安装包的开发人员而言,这应该是一个非常常见的问题,应该先问过它,但我无法在任何地方找到合适的答案.
在setup.py中
from distutils.core import setup
setup(
....,
....,
data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])],
....,
....,
)
Run Code Online (Sandbox Code Playgroud)
sudo python setup.py安装的结果
running install
running build
running build_py
running build_scripts
running install_lib
running install_scripts
changing mode of /usr/local/bin/MyApp_trainer to 755
changing mode of /usr/local/bin/MyApp_reference_updater to 755
changing mode of /usr/local/bin/MyApp_predictor to 755
changing mode of /usr/local/bin/reference_updater to 755
running install_data
creating /usr/local/MyApp/CBV
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV
running install_egg_info
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info
Run Code Online (Sandbox Code Playgroud)
从使用上述结果的观察,"/ usr/local"是"data_files"根目录.除了硬编码,是否有任何Python函数可以给我这个"data_files"根目录?
我有一个带有标准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)
任何见解将不胜感激!
我想从以下回购https://github.com/geomin/django-countria安装软件包。我正在使用的命令是pip install git://github.com/geomin/django-countria.git。Pip将存储库克隆到一个临时文件夹,然后运行setup.py。问题是安装完成后,site_packages包含文件countria-0.8-py2.7.egg/countria/models.py,countria-0.8-py2.7.egg/countria/__init__.py但不包含fixtures和locale文件夹。如果我克隆程序包并运行,setup.py我将得到相同的行为。
我有以下软件包要分发:
mymodule/
data/
1.txt
mymodule/
__init__.py
tests/
test_mymodule.py
setup.py
Run Code Online (Sandbox Code Playgroud)
为了在vitualenv下安装它,我应用以下命令:
pip install .
Run Code Online (Sandbox Code Playgroud)
一切都安装正确,但我的数据文件的路径已损坏。
>>> from mymodule import get
>>> print(get())
...
FileNotFoundError: [Errno 2] No such file or directory: '/home/alexander/Stuff/pip_example/mymodule_test/venv/lib/python3.5/site-packages/mymodule/../data/1.txt'
Run Code Online (Sandbox Code Playgroud)
经过研究发现,该文件夹data是在导致错误的virtualenv文件夹的根目录中创建的。我应该如何改进代码以保持测试正常工作并拥有正确的数据文件路径?
文件内容:
数据/1.txt
yes
Run Code Online (Sandbox Code Playgroud)
mymodule / __ init__.py
import os
src = os.path.join(
os.path.dirname(__file__),
'../data/1.txt'
)
def get():
with open(src) as f:
return f.read().strip()
Run Code Online (Sandbox Code Playgroud)
测试/ test_mymodule.py
import unittest
import mymodule
class MymoduleTest(unittest.TestCase):
def test_get(self):
s = mymodule.get()
self.assertEqual(s, "yes")
Run Code Online (Sandbox Code Playgroud)
setup.py
from distutils.core import setup
data_files = [ …Run Code Online (Sandbox Code Playgroud) 我正在构建我的第一个 python 包(然后使用 pip 安装),并且我需要使用一些非 python 文件。在这些答案中,解释了我应该使用该pkg_resources功能。但我无法找出一个有效的例子。假设我有这个项目结构:
package_name/
----data/
--------image.png
----package_name/
--------__init__.py
--------file.py
----setup.py
----MANIFEST.in
----conf.yml
Run Code Online (Sandbox Code Playgroud)
现在我想访问conf.yml并image.png来自file.py. 我应该如何进行:
我正在尝试使用 构建一个 python 轮setuptools。该包需要包含两个文件:
mymodule.py- 与以下目录相同的 python 模块setup.pymyjar.jar- 存在于我的包目录之外的 java .jar 文件我正在使用 构建我的包python3 setup.py bdist_wheel。
如果我setup()这样调用:
setup(
name="mypkg",
py_modules=["mymodule"],
data_files=[('jars', ['../target/scala-2.11/myjar.jar'])]
)
Run Code Online (Sandbox Code Playgroud)
然后myjar.jar确实成功地包含在 .whl 中(到目前为止还不错),但是当我pip install mypkg将罐子放在/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'}
)
Run Code Online (Sandbox Code Playgroud)
或者
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': ['../target/scala-2.11/myjar.jar']}
)
Run Code Online (Sandbox Code Playgroud)
那么myjar.jar根本不包含在 .whl 中。我尝试复制myjar.jar到同一目录并更改setup.py为:
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': 'myjar.jar'} …Run Code Online (Sandbox Code Playgroud) python ×10
setup.py ×4
setuptools ×4
distutils ×3
pip ×3
package ×2
python-3.x ×2
distribute ×1
file ×1
python-2.7 ×1